JavaScript срабатывает дважды при изменении формы - PullRequest
0 голосов
/ 27 мая 2020

Я использую Javascript для запуска потока, когда я хочу изменить состояние. Все работало нормально, но функция JavaScript срабатывала два раза, когда я меняю состояние своей записи.

Я думаю, что проблема связана с сохранением. enter image description here enter image description here enter image description here enter image description here

storno=function (executionContext)
{
	var functionName = "storno";
	var formContext = executionContext.getFormContext();
	if(formContext.getAttribute("statecode").getValue() == 3)
	{ 
		//try{
			var data= {"id": ""};
			data.id = formContext.data.entity.getId();
			var requestUrl = "https://prod-78.westeurope.logic.azure.com:443/workflows/6bff2c7051424e00b8519160db83c1bf/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=sfSBGx1gP3WzU1x7XMY64WVFc_RJ6EBMadIBnNudKR4";
			var req = new XMLHttpRequest();
			req.open("POST",requestUrl,true);
			req.setRequestHeader("Accept","application/json");
			req.setRequestHeader("Content-Type","application/json; charset=utf-8");
			req.setRequestHeader("OData-MaxVersion","4.0");
			req.setRequestHeader("OData-Version","4.0");
			req.onreadystatechange = function(){
				if(this.readyState == 4 || this.readyState == 2){
					req.onreadystatechange = null;
				
					if (this.status == 200 || this.status == 204 || this.status == 202){
						formContext.data.refresh(true);
		       Xrm.Utility.openEntityForm(formContext.data.entity.getEntityName(),formContext.getAttribute("description").getValue());
						
					}
					//else{
					//	var error = JSON.parse(this.response).error;
					//}
				}
			};
			req.send(JSON.stringify(data));	
		//}
		//catch(ex){
		//Obj_RunFlow.throwError(functionName,ex.massage);
		//}
	}
		
};

1 Ответ

0 голосов
/ 28 мая 2020

могу я добавить свои 2 цента.

Почему вы запускаете свой поток через Javascript, а теперь через соединитель CDS.

Если вы запускаете свой поток с помощью Javascript, он будет запускается только при взаимодействии пользователя с кнопкой. Ваш поток не сработает, если запись (статус) будет изменена каким-либо фоновым логом c или каким-либо другим плагином.

Чтобы ваш поток работал при изменении статуса при любых обстоятельствах, пусть это будет через взаимодействие пользователя с фоновым логом c,

Я бы предпочел запускать ваш поток через соединитель CDS и это тоже при обновлении записи и отфильтровать ваше поле, чтобы оно было только состоянием.

В этом таким образом, ваш поток будет запускаться автоматически только при изменении поля статуса.

...