Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Оқиға келесі жағдайларда орын алады:OnSave
- Пайдаланушы сақталатын деректер өзгермеген жағдайда да, пәрмен тақтасында Сақтау немесе жаңарту түймешігін таңдайды.
- Код formContext.data.entity.save әдісін орындайды, тіпті сақталатын деректер өзгермеген жағдайда да.
- Пайдаланушы пішіннен шығып кетеді және пішінде сақталмаған деректер бар.
- Автосақтау параметрі деректер өзгергеннен кейін 30 секундтан кейін қосылады және пішінде сақталмаған деректер бар.
- Код formContext.data.save әдісін орындайды және пішінде сақталмаған деректер бар.
- Код formContext.data.refresh әдісін орындайды, бірінші параметр ретінде true мәнін береді және пішінде сақталмаған деректер бар.
Ескертпе
Кездесу, қайталанатын кездесу немесе қызмет әрекеті жазбаларына арналған оқиға сақтау әрекетін болдырмайды және OnSave хабарды өзгертуді жалғастыру үшін немесе BookемесCreate.Update Сол OnSave себепті, осы бағыттағы жұмыстар мен PostSave атқарылып жатқан жұмыстар жұмыс істемейді.
Сақтауды орындау үшін қай батырманы басқанын анықтау үшін getSaveMode әдісін пайдаланыңыз.
Оқиға аргументтері нысанындағы preventDefault әдісін пайдалану арқылы сақтау әрекетін болдырмауға болады. preventDefault әдісі орындау контекстінің бөлігі болып табылатын getEventArgs әдісін пайдалану арқылы қол жетімді. Орындау контексті автоматты түрде пішін оқиға өңдеушісіне беріледі.
Асинхронды оқиға өңдеушісін қолдау
OnSave оқиғасы оқиғаны өңдеушілер қайтарған уәделерді сақтамас бұрын шешілуін күту мүмкіндігіне ие, бұл оқиғаның OnSave асинхронды ("асинхронды") болуына мүмкіндік береді.
OnSave Оқиға өңдеушісі уәдені қайтарған кезде OnSave оқиға синхронды болады. Жазбаны сақтау өңдеуші қайтарған әрбір уәде шешілген кезде жүзеге асырылады. Қайтарылған кез-келген уәделер үшін әр уәде үшін 10 секундтық шектеу бар, содан кейін платформа уәделердің уақыты аяқталды деп санайды. Бұл мерзім уәдеге сәйкес жүзеге асырылады. Мысалы, егер бізде 5 уәде қайтарылған болса, күтудің жалпы уақыты 50 секундты құрайды.
Егер уәде қабылданбаса немесе уақыты өтіп кетсе, сақтау әрекеті қолданыстағы скрипт қателеріне ұқсас әрекет етеді. Егер скрипт қатесі/қабылданбаған уәде немесе өңдеуші уақыты аяқталған жағдайда сақтау оқиғасының орын алуына жол бермеу үшін сол өңдегіштегі оқиға аргументтері нысанында preventDefault әдісін пайдаланыңыз.
Сондай-ақ, сақтау әрекетін өңдеушідегі қатеге қарамастан немесе оқиға аргументтері нысанындағы preventDefault әдісін пайдаланбағанына қарамастан болдырмауға болады. Егер осы әдіс шақырылса, Async OnSave оқиғасы барлық уәделердің шешілуін күтеді, бірақ сақтау орындалмайды. Бұл әдісті шақыру логиканың ішінде .then() & .catch() орындалатынын білдіреді.
OnSave Оқиға бір өңдеуші үшін қайтарылған уәдені күтеді. Егер бірнеше уәделер қажет болса, барлық уәделерді Promise.all() әдістегі орау және бір алынған уәдені қайтару ұсынылады. Барлығы уәде қайтаратын бірнеше өңдеуші үшін барлық оқиғаларды шақыратын және барлық қажетті уәделерді орайтын бір уәдені қайтаратын бір өңдеуші жасауды ұсынамыз. Бұл әдіс уақытты үнемдеуге бағытталған уақытты азайту.
Синхронды OnSave өңдеушілерін пайдалану туралы сценарийдің мысалы
Жұмыс тапсырысы қызметінің тапсырмасын жасауды қарастырыңыз, таңдалған тұтынушы активінің жұмыс тапсырысында көрсетілген бірдей тіркелгі бар екенін тексеру қажет. Жұмыс тапсырысы мен Тұтынушы активіндегі тіркелгіні алу асинхронды процестер болып табылады және тексеру жүзеге асырылмас бұрын аяқталуы керек.
Бұл сценарийде, бірнеше асинхронды процестер болғандықтан және екі шақыру да екеуін де әдіске Promise.all() орау арқылы бір уәде қайтарады.
Ескертпе
Бұл preventDefault әдісті тек синхронды түрде қолдануға болады.
Мысалы:
function myHandler() {
return Promise.all([getWorkOrderPromise, getCustomerAssetPromise]).then((values) => {
var workOrder = values[0];
var customerAsset = values[1];
// Perform validation
if (isValid(workOrder, customerAsset)) {
return Promise.resolve();
}
return Promise.reject(new Error("Validation failed for the work order and customer asset"));
});
}
Бағдарлама параметрін пайдаланып асинхрондауСақтауды қосу
Асинхронды onSave өңдеушілерін пайдалану үшін оны бағдарлама параметрі арқылы қосу қажет:
Дұрыс ортаны таңдаңыз.
Сол жақ шарлау аумағында Бағдарламалар тармағын таңдаңыз.
Қолданбаны таңдаңыз да, содан кейін ... (эллипс) тармағын таңдаңыз. Өңдеу пәрменін таңдаңыз.
Пәрмен тақтасынан Параметрлер тармағын таңдаңыз.
Диалогтық терезе ашылғанда, Мүмкіндіктер тармағын таңдаңыз.
Async onSave өңдегішін қосыңыз.
Сақтау опциясын таңдаңыз.
СинхрондалмағанСақтау уақыты
Асинхронды OnSave өңдеуші пайдаланған кезде, пішін өңдеуші қайтарған уәденің орындалуын күтеді. Пішінді сақтаудың уақтылы аяқталуын қамтамасыз ету үшін, өңдеуші 10 секундтан кейін асинхронды OnSave өңдеуші жақсы өнімділік үшін реттеу туралы хабарлау үшін тайм-аут ерекшелігін лақтырады.
Кейбір жағдайларда құрылғыны OnSave 10 секундтан артық тоқтату қажет болады. Мысалы, диалогты ашып, сақтауды жалғастырмас бұрын пайдаланушының кірісін күту. Синхрондау әрекеті уәденің шешілуін күтетініне көз жеткізу үшін disableAsyncTimeout әдісін пайдаланыңыз.
Ескертпе
Кез келген күту мәлімдемелерін немесе синхронды қоңырауларды орындамас бұрын қоңырау disableAsyncTimeout шалуыңыз керек.
Мысалы:
async function myHandler(context) {
context.getEventArgs().disableAsyncTimeout();
// The 10000ms time out will not be disabled if the above line does not come before all async awaits
await Xrm.Navigation.openConfirmDialog({ text: "Are you sure you want to save?" });
}
ӨшіруAsyncTimeout параметрі шақырылған кезде, сол өңдеушінің уақыты қолданылмайды. Ол Елбасының уәдесінің орындалуын күтіп отыр.
Бұл әдісті сақтықпен қолдану керек, өйткені ол құрылғының өнімділігіне әсер етуі мүмкін.
Қатысты мақалалар
Grid OnSave оқиғасы
Оқиғалар (Клиент API анықтамасы)
Үлгіге негізделген қолданбалардағы пішіндер мен торлардағы оқиғалар