我创建了一个自定义的batchable类,它通常由一个调用SysOperationServiceController的菜单项运行,并以自定义类名作为参数。自定义类标记为RunOn Server。在我正在执行的代码中,我正在尝试删除LogisticsLocation记录,但是,它失败并出现错误:“无法删除地址(LogisticsPostalAddress)中的记录。 相应的AOS验证失败了。“在通过LogisticsPostalAddress.aosValidateDelete()代码的逻辑步进之后,我发现没有充分的理由为什么这应该失败,但这不是我的问题的原因。
我的目标是尝试通过logisticsLocation.skipAOSValidation(true)绕过此AOS验证。在解决了我获得的权限违规错误后,我发现在跳过AOS验证之前我必须先断言SkipAOSValidationPermission。但是,即使我这样做,aosValidateDelete()逻辑仍然被击中。我也试图避免做logisiticsLocation.doDelete(),因为我确实希望它在标准的DeleteAction逻辑之前并级联下来也删除相应的记录。
最终,我的目标是删除此记录而不会出错。而且我看不出它为什么会失败的任何原因,在LogisticsPostalAddress上有一个带有Restricted选项的DeleteAction,但是,它是一个没有相关记录的表。 LogisticsPostalAddress.aosValidateDelete()中的逻辑完全没有意义,这就是为什么我要绕过它。所以我真正的问题仍然存在,为什么当我明确告诉它不要时,它仍然会尝试AOS验证并且我已经通过所有安全箍跳了这么做?我该如何跳过此验证?
我的代码:
while select dirPartyPostalAddressView
where dirPartyPostalAddressView.Party == dirPartyRecId //some local variable established earlier
join forUpdate logisticsLocation
where logisticsLocation.RecId == dirPartyPostalAddressView.Location
{
if (isRunningOnServer())
{
CodeAccessPermission::revertAssert();
skipValidPermission = new SkipAOSValidationPermission();
skipValidPermission.assert();
logisticsLocation.skipAosValidation(true);
}
logisticsLocation.delete();
}