2015-04-01 4 views
2

Я пишу код javascript, чтобы изменить форму объекта в Dynamics CRM на основе значения поля для каждой формы.SuccessCallback немедленно запускается в Xrm.Page.data.save

Чтобы изменить форму, пользователь должен изменить значение поля. Затем во время события onChange мой js приходит, запускает сохранение, должен ждать результата и затем изменять форму. (Если вы сохраните и изменения в то же время, есть еще окно, показанное просит пользователя подтвердить оставляя несохраненные изменения)

Теперь должен быть способ сделать это:

Xrm.Page.data.save(saveOptions).then(successCallback, errorCallback) 

как это , описанный на msdn: :

Сохраняет запись асинхронно с возможностью установки функций обратного вызова, которые будут выполнены после завершения операции сохранения.

Я использую его в качестве такового:

var campaignType = Xrm.Page.getAttribute('typecode').getValue(); 
if (xxx.Forms.hasOwnProperty(campaignType)) { 
Xrm.Page.data.save().then(function() { xxx.redirectToForm(xxx.Forms[campaignType]); }, null); 

Но изменение формы до сих пор срабатывает непосредственно во время сохранения.

Что я делаю неправильно?

+0

Я использую УРК 2013, пардон ссылка MSDN указывал на неправильный URL, фик его – buddybubble

+0

Вы можете установить setSubmitedMode этого поля к никогда, так если он изменен, если не будет запрашивать сохранение изменений. Однако вы не обновите это поле, поэтому вы можете обновить это поле с помощью запроса перед сохранением формы. – Sxntk

ответ

1

У меня возникла аналогичная проблема при попытке обновить панель процессов.

Xrm.Page.data.save().then 
     (function() { 
       window.location.reload(true); 
      }, 
      function() { 
       windows.alert("broken"); 
      }  
     ); 

Я настоятельно рекомендую вам попробовать применить логику ванильного CRM, для меня, что было нарушение логики была составной третья сторона называется N52 правило, их код был мешая обратный вызов принуждая обновлённую страницы перед событием сохранения. Ваш код кажется правильным.

0

Эй, эскизы сохранения и обновления асинхронны! поэтому он сразу же попадает в обработчик успеха.

Что вы можете попробовать использует файл SDK.REST.js для CRM

function updateFunction(entityId) { 

    var campaignType = Xrm.Page.getAttribute('typecode').getValue(); 
    if (xxx.Forms.hasOwnProperty(campaignType)) { 
    var entity= {}; 
    entity.typecode= campaignType; 

    SDK.REST.updateRecord(
     entityId, 
     entity, 
     entityName, //"Account" 
     function() { 
      writeMessage("The record changes were saved"); 
      xxx.redirectToForm(xxx.Forms[campaignType]); 
     }, 
     null 
     ); 
    } 
} 

https://msdn.microsoft.com/en-us/library/gg334427(v=crm.7).aspx

Здесь вы можете вызвать updateFunction приведенный выше onChange и в onSuccess обработчика вы можете попробовать позвонить форму вам хотите позвонить. Я не пробовал это так, как вы хотите, но дайте мне знать, если это сработает.

проверить эту ссылку, как хорошо

https://msdn.microsoft.com/en-us/library/gg334720.aspx#BKMK_entityOnSave

Смежные вопросы