Opportunities画面の新しいアクションメニューであるCreate Projectをクリックしてプロジェクトエントリ画面をリダイレクトまたはポップアップし、保存し直すと、プロジェクトフィールドで選択された作成済みのプロジェクトを使用して、機会画面に移動します。PXRedirectRequiredExceptionの後に作成されたエントリを取得する方法
これまで私の他の同様のモジュールからコピーしようとしたコードですが、保存後にOppurtunity画面のプロジェクトフィールドを更新していないという問題がありました。プロジェクトの作成ポップアップで閉じる。&
public class OpportunityMaint_Extension:PXGraphExtension<OpportunityMaint> {
public override void Initialize() {
Base.Action.AddMenuAction(createProject);
createSalesOrder.SetVisible(false);
createSalesOrder.SetEnabled(false);
}
public PXAction<PX.Objects.CR.CROpportunity> createSalesOrder;
[PXUIField(Visible = false)]
public IEnumerable CreateSalesOrder(PXAdapter adapter) {
return null;
}
public PXAction<PX.Objects.CR.CROpportunity> createProject;
[PXUIField(DisplayName = "Create Project", MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Select)]
[PXButton()]
public IEnumerable CreateProject(PXAdapter adapter) {
List<CROpportunity> opportunities = new List<CROpportunity>(adapter.Get().Cast<CROpportunity>());
foreach (CROpportunity opp in opportunities) {
Base.Save.Press();
PXLongOperation.StartOperation(Base,() => ConvertToProject(opp));
}
return opportunities;
}
public static void ConvertToProject(CROpportunity opportunity) {
ProjectEntry projectEntry = PXGraph.CreateInstance<ProjectEntry>();
PMProject proj = new PMProject {
ContractCD = (string)"<NEW>",
CustomerID = opportunity.BAccountID,
Description = opportunity.OpportunityName,
OwnerID = opportunity.OwnerID
};
proj = projectEntry.Project.Insert(proj);
opportunity.ProjectID = proj.ContractID;
throw new PXRedirectRequiredException(projectEntry , "Create Project", true);
}
protected void CROpportunity_RowSelected(PXCache cache, PXRowSelectedEventArgs e) {
var row = (CROpportunity)e.Row;
if (row == null) return;
//createProject.SetEnabled(true);
createSalesOrder.SetVisible(false);
createSalesOrder.SetEnabled(false);
}
}