我有一个通常会安排的处理屏幕。我想在自定义项目中包含一个非活动的计划定义,以使客户更容易。我无法在自定义屏幕中找到该选项以添加自动化。有什么办法吗?
答案 0 :(得分:1)
如果没有开箱即用的选项将特定实体包含到自定义项目中,您可以创建一个自定义插件,该插件将在发布过程结束时执行。该插件可用于与DAC和Graph一起使用,以根据需要插入,更新,删除数据。这是首选使用SQL脚本作为其DBMS中立(适用于SQL Server或MySQL)。
这是一篇将插件添加到自定义项目的帮助文章: To Add a Customization Plug-In to a Project
对于添加自动日程安排的具体问题,您可以使用与该页面相关的图表AUScheduleMaint
。下面是一个工作示例,如果计划尚不存在,则将 Release IN Documents(IN501000)添加为非活动计划。替换屏幕ID和描述以满足您的需求。如果您需要默认的其他计划设置,请根据需要修改AUSchedule
的插入。
public class MyCustomPlugin : CustomizationPlugin
{
//This method executed after customization was published and website was restarted.
public override void UpdateDatabase()
{
CreateSchedule("IN501000", "My New IN501000 Schedule");
}
/// <summary>
/// Create a schedule for a given screen if the screen doesn't have a schedule
/// </summary>
/// <param name="screenID">Sitemap screen ID</param>
/// <param name="scheduleDesc">Schedule description when creating a new schedule</param>
protected virtual void CreateSchedule(string screenID, string scheduleDesc)
{
if (string.IsNullOrWhiteSpace(screenID))
{
throw new ArgumentNullException("screenID");
}
if (string.IsNullOrWhiteSpace(scheduleDesc))
{
throw new ArgumentNullException("scheduleDesc");
}
var auScheduleGraph = PXGraph.CreateInstance<PX.SM.AUScheduleMaint>();
var schedule = FindScheduleByScreen(auScheduleGraph, screenID);
if (schedule != null)
{
//schedule exists, no need to create...
return;
}
auScheduleGraph.Schedule.Insert(new PX.SM.AUSchedule
{
ScreenID = screenID,
Description = scheduleDesc,
IsActive = false,
StartTime = PX.Common.PXTimeZoneInfo.UtcNow
});
auScheduleGraph.Actions.PressSave();
this.WriteLog(string.Format("Created automation schedule '{0}' for screen '{1}'", scheduleDesc, screenID));
}
/// <summary>
/// Find an automation schedule by screen ID
/// </summary>
/// <param name="graph"></param>
/// <param name="screenID"></param>
/// <returns></returns>
protected virtual PX.SM.AUSchedule FindScheduleByScreen(PXGraph graph, string screenID)
{
PX.SM.AUSchedule auSchedule = null;
foreach (PX.SM.AUSchedule result in PXSelect<PX.SM.AUSchedule, Where<PX.SM.AUSchedule.screenID, Equal<Required<PX.SM.AUSchedule.screenID>>>>.Select(graph, screenID))
{
if (auSchedule == null)
{
auSchedule = result;
continue;
}
if (result.IsActive.GetValueOrDefault() && !auSchedule.IsActive.GetValueOrDefault())
{
//Find an active if possible
auSchedule = result;
}
}
return auSchedule;
}
}