Кастомизация
12
Июл
0

Искать адрес

В стандартном функционале CRM есть такая кнопочка «Искать адрес», которая позволяет подтянуть значения адреса с записей некоторых объектов (например, Предложения).
Попробуем воспроизвести этот функционал на кастомном объекте/поле.

  • Создайте следующие поля на нужном Вам объекте:
    • new_address1_name
    • new_address1_line1
    • new_address1_line2
    • new_address1_line3
    • new_address1_city
    • new_address1_state
    • new_address1_zip
    • new_address1_country

    Создайте аналогичный набор полей с корнем «address2»;

  • Создайте JS Веб-ресурс с таким кодом и добавьте его к форме нужного объекта:
    function CustomLookup() {
        var account = Xrm.Page.getAttribute("new_accountid").getValue();
        var _object = openStdDlg("/sfa/quotes/dlg_lookupaddress.aspx?headerForm=1&parentType=1&parentId=" + account[0].id + "&willCall=0", "LookupAddress", 500, 330, true);
        if (_object) {
            PopulateBillToAddress(_object);
            PopulateShipToAddress(_object);
        }
    }
    
    function PopulateBillToAddress(object) {
        if (object.BillTo) {
            setFieldValue("new_address1_name", object.Address.Name);
            setFieldValue("new_address1_line1", object.Address.Line1);
            setFieldValue("new_address1_line2", object.Address.Line2);
            setFieldValue("new_address1_line3", object.Address.Line3);
            setFieldValue("new_address1_city", object.Address.City);
            setFieldValue("new_address1_state", object.Address.StateOrProvince);
            setFieldValue("new_address1_zip", object.Address.PostalCode);
            setFieldValue("new_address1_country", object.Address.Country);
        }
    }
    
    function PopulateShipToAddress(object) {
        if (object.ShipTo) {
            setFieldValue("new_address2_name", object.Address.Name);
            setFieldValue("new_address2_line1", object.Address.Line1);
            setFieldValue("new_address2_line2", object.Address.Line2);
            setFieldValue("new_address2_line3", object.Address.Line3);
            setFieldValue("new_address2_city", object.Address.City);
            setFieldValue("new_address2_state", object.Address.StateOrProvince);
            setFieldValue("new_address2_zip", object.Address.PostalCode);
            setFieldValue("new_address2_country", object.Address.Country);
        }
    }
    
    function setFieldValue(fieldName, fieldValue) {
        Xrm.Page.getAttribute(fieldName).setValue(fieldValue);
    }
    
    function f_accountid() {
        Xrm.Page.ui.refreshRibbon();
    }
    

    Тут несколько функций. Первые четыре вызывают диалог выбора адреса и подстановки значений в поля. А четвертая обновляет Ленту при изменении поля, чтобы декативировать кнопку на Ленте при пустом лукапе;

  • Подключите к форме нужного объекта созданный JS Веб-ресурс и повесьте на лукап вызов функции f_accountid;
  • Создайте в нужном объекте новую кнопку:
    <RibbonDiffXml>
      <CustomActions>
        <CustomAction Id="LookupAddress.CustomAction"
                      Location="Mscrm.Form.new_test.MainTab.Collaborate.Controls._children"
                      Sequence="1">
          <CommandUIDefinition>
            <Button Id="LookupAddress.Button"
                    Command="LookupAddress.Command"
                    CommandType="General"
                    Image16by16="/_imgs/SFA/LookupAddress_16.png"
                    Image32by32="/_imgs/SFA/LookupAddress_32.png"
                    LabelText="Искать адрес"
                    TemplateAlias="o1"
                    ToolTipDescription="Искать адрес"
                    ToolTipTitle="Искать адрес"
                    Sequence="1" />
          </CommandUIDefinition>
        </CustomAction>
      </CustomActions>
      <Templates>
        <RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates>
      </Templates>
      <CommandDefinitions>
        <CommandDefinition Id="LookupAddress.Command">
          <EnableRules>
            <EnableRule Id="LookupAddress.EnableRule" />
          </EnableRules>
          <DisplayRules />
          <Actions>
            <JavaScriptFunction Library="$webresource:new_test.js" FunctionName="CustomLookup" />
          </Actions>
        </CommandDefinition>
      </CommandDefinitions>
      <RuleDefinitions>
        <TabDisplayRules />
        <DisplayRules />
        <EnableRules>
          <EnableRule Id="LookupAddress.EnableRule">
            <ValueRule Field="new_accountid" InvertResult="true" Value="null"/>
          </EnableRule>
        </EnableRules>
      </RuleDefinitions>
      <LocLabels />
    </RibbonDiffXml>
    

З.Ы. В данном примере поле new_accountid это лукап на Организацию, из которой будет подтягиваться адрес. Соответственно, Вы можете изменить его на свое поле.

Идем пробовать…




Комментарии (0)

*

code