Кастомизация
19
Янв
0

Искать адрес…

На форме объекта Предложение, Заказ и Счет есть кнопка «Искать адрес…». Она используется, чтобы отобразить диалоговое окно выбора адреса из связанной записи клиента, который затем помещается в адрес доставки и/или адрес получения счета соответствующего объекта (Предложение, Заказ или Счет).

Часто бывает так, что Бизес-партнеры (они же организации) и Контакты, которые с ними связаны, имеют один и тот же адрес. И чтобы не копировать ручками одну и ту же информацию в разные формы, аналогичная кнопочка была бы здесь весьма полезна. Ее созданием сейчас и займемся 🙂

Диалоговое окно выбора адреса имеет примерно такой URL:

http://crmserver:5555/org/_controls/lookup/lookupsingle.aspx?class=BrowseCustomerAddress&objecttypes=1071&browse=1&bindingcolumns=line1%2cpostalcode&parentType=1&parentId={21437764-F9CA-44f7-806B-6E9889CEE41E}&ShowNewButton=1&ShowPropButton=1&DefaultType=1071

Страница lookupsingle.aspx используется, чтобы выбрать одну запись. При этом в стоке URL передаются такие параметры:

  • class – используется для внутренних нужд;
  • objecttypes – код объектов;
  • browse=1 – означает что это не используется стандартное представление лукапа;
  • bindingcolumns – определяет, какие столбцы показать помимо отображаемого имени;
  • parentType – код объекта который выбран в поле клиента (1 это Бизнес-партнер);
  • parentId – GUID записи выбранной в поле клиента;
  • ShowNewButton и ShowPropButton – п ответственны за отображение кнопок создания новой записи и показа свойств выделенной;
  • DefaultType – используется только если objecttypes это список объектов.

Чтобы имитировать на форме Контакта аналогичную кнопку и тянуть адрес из связанного Бизнес-партнера добавьте в ISV.Config такой код:

<Entity name="contact">
	<ToolBar ValidForCreate="1" ValidForUpdate="1">
		<Button Icon="/_imgs/ico_18_home.gif" Client="Web,Outlook" JavaScript="

			var parentCustomerField = crmForm.all.parentcustomerid;

			if (parentCustomerField &amp;&amp; parentCustomerField.DataValue) {
				var parentCustomer = parentCustomerField.DataValue[0];
				var url = '/' + ORG_UNIQUE_NAME + 	'/_controls/lookup/lookupsingle.aspx?class=BrowseCustomerAddress&amp;objecttypes=1071&amp;browse=1&amp;bindingcolumns=line1%2cpostalcode&amp;parentType=' + parentCustomer.type + '&amp;parentId=' + parentCustomer.id + '&amp;ShowNewButton=1&amp;ShowPropButton=1&amp;DefaultType=1071';

				var selectedAddress = window.showModalDialog(url, null, 'dialogWidth:600px;dialogHeight:400px;resizable:yes');

				/*
				Возвращаемое диалоговым окном значение (при использовании класса BrowseCustomerAddress) является объектом, содержащим все поля адреса. Перебираем их и заносим в аналогичные поля целевого объекта. 
				*/
   			
            	if (selectedAddress != null) {

					var addressFields = selectedAddress.items[0].values;

					for ( var index in addressFields ) { 
						var control = document.getElementById('address1_' + addressFields[index].name);

						if (control) {
							control.DataValue = addressFields[index].value;
						}
					}
				}
			} else {
   				 alert('Сначала выберите Бизнес-партнера.');
			}
            
		" >

            <Titles>
                <Title LCID="1049" Text="Искать адрес..." />
            </Titles>
            <ToolTips>
                <ToolTip LCID="1049" Text="Искать адрес..." />
            </ToolTips>
		</Button>
	</ToolBar>
</Entity>

Теперь на форме появится кнопка «Искать адрес…», нажатие на которой откроет диалоговое окно со списком адресов (если кончено Вы выбрали Бизнес-партнера).
Учтите, что отображены только адреса в названии полей, которых содержится слово «name» (например, address1_name).



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

*

code