2017-02-08 4 views
0

プロジェクト請求の実行画面を使用して、AR /請求書とメモにレコードを作成しています。プロジェクト請求実行画面の傍受プロセス

請求書&メモ画面では、得意先受注ヘッダを入力するプロセスが必要です。 「文書の詳細」タブのグリッドセクションに追加されているユーザーフィールドとともに表示されます。現時点では、プロセスはこれを実行していません。

私は、すなわち「のAddHandler」を使用して、私は精通してる技術を使用して、画面上の処理動作を傍受したいと思います:

[PXOverride] 
protected virtual IEnumerable Items (PXAdapter adapter) 
{ 
    PXGraph.InstanceCreated.AddHandler<BillingProcess>((graph) => 
    { 
     graph.RowInserting.AddHandler<BillingProcess.ProjectsList>((sender, e) => 
     { 

      //Custom logic goes here 

     }); 
    }); 
    return Base.action.Press(adapter); 
} 

私はそれをリモート似ている「ビル一切Base.Actionsを見ません'または' Bill All '。

これは明らかに私が必要とするコードではありませんが、これは一般的な場所であると思います。

ソースビジネスロジックを確認した後、私は「Bill」または「Bill All」アクションや「アクション」を全く見ません(困惑しています)。私は 'items'というIEnumerableメソッドを見ています。

これは正しい方法ですか?

更新日:2017年2月14日

答えを使用して再提供:オーバーライドされたメソッドInsertTransaction(...を)私は、次のロジックを使用して(必要)当社ARTranユーザーフィールドを設定しようとしました:

 PMProject pmproj = PXSelect<PMProject, Where<PMProject.contractID, Equal<Required<PMProject.contractID>>>>.Select(Base, tran.ProjectID); 
     if (pmproj == null) return; 

     PMProjectExt pmprojext = PXCache<PMProject>.GetExtension<PMProjectExt>(pmproj); 
     if (pmprojext == null) return; 

     ARTranExt tranext = PXCache<ARTran>.GetExtension<ARTranExt>(tran); 
     if (tranext == null) return; 

     tranext.UsrContractID = pmprojext.UsrContractID; 

これが正しい値に、ユーザーフィールドを設定していても、それはまだプロセスが終了したときに必須フィールドが空であることを私にエラーを与えます。私の限られた知識は、私がなぜそれを理解するのを妨げる。

答えて

0

プロジェクトの実行請求画面で、プロセスプロセスのキャプションすべてボタンはBLCコンストラクタでそれぞれビルビルすべてに変更しました。 プロセスデリゲートがデータBillingFilter_RowSelectedハンドラ内表示アイテムに設定されている:確認上記のコード・スニペットとして

public class BillingProcess : PXGraph<BillingProcess> 
{ 
    ... 

    public BillingProcess() 
    { 
     Items.SetProcessCaption(PM.Messages.ProcBill); 
     Items.SetProcessAllCaption(PM.Messages.ProcBillAll); 
    } 

    ... 

    protected virtual void BillingFilter_RowSelected(PXCache cache, PXRowSelectedEventArgs e) 
    { 
     BillingFilter filter = Filter.Current; 

     Items.SetProcessDelegate<PMBillEngine>(
      delegate (PMBillEngine engine, ProjectsList item) 
      { 
       if (!engine.Bill(item.ProjectID, filter.InvoiceDate, filter.InvFinPeriodID)) 
       { 
        throw new PXSetPropertyException(Warnings.NothingToBill, PXErrorLevel.RowWarning); 
       } 
      }); 
    } 

    ... 
} 

AR請求書およびメモ画面内のすべてのレコードがPMBillEngineクラスのインスタンスによって作成されます。

public class PMBillEngineExt : PXGraphExtension<PMBillEngine> 
{ 
    public delegate ARInvoice InsertNewInvoiceDocumentDel(string finPeriod, string docType, Customer customer, 
     PMProject project, DateTime billingDate, string docDesc); 

    [PXOverride] 
    public ARInvoice InsertNewInvoiceDocument(string finPeriod, string docType, Customer customer, PMProject project, 
     DateTime billingDate, string docDesc, InsertNewInvoiceDocumentDel del) 
    { 
     var result = del(finPeriod, docType, customer, project, billingDate, docDesc); 
     // custom logic goes here 
     return result; 
    } 

    [PXOverride] 
    public void InsertTransaction(ARTran tran, string subCD, string note, Guid[] files) 
    { 
     // the system will automatically invoke base method prior to the customized one 
     // custom logic goes here 
    } 
} 

プロジェクトの実行請求プロセスがAR請求書やメモに新しいレコードを作成するために、InsertNewInvoiceDocumentメソッドを呼び出します 画面とInsertTransaction方法:下記のPMBillEngine BLC拡張内InsertNewInvoiceDocumentInsertTransactionメソッドをオーバーライドする方法を示すコードスニペットです新しい請求書取引を追加します。

一つ重要なことは言うまで:上書きInsertNewInvoiceDocumentInsertTransactionメソッドが呼び出されます、ユーザーがいずれかのプロジェクト処理プロジェクトを実行請求画面からまたはデータ入力から画面プロジェクトの実行課金操作を起動したとき。仮想BLCのメソッドをオーバーライドする方法の詳細については

ヘルプ参照 - すべてのAcumaticaのERPで使用可能な仮想メソッドをオーバーライドするために>- >カスタマイズ - >カスタマイズビジネスロジック - >グラフを6.1ウェブサイト

+0

私はInsertTransactionsオーバーライドメソッドを使用しようとしましたが、これはうまくいきませんでした。編集したオリジナルの投稿を参照してください。 – pmfith

+0

このリクエストをさらに支援する唯一の方法は、カスタマイズをデバッグすることです。明らかに、それはサポートの場合が必要です。 – RuslanDev

+0

これはRuslanによって解決されました。この問題は、カスタマイズプロジェクトの拡張ライブラリとコードウィンドウのDACフィールドの複製にありました。ありがとう、ルスラン!... – pmfith

関連する問題