2017-01-13 108 views
0

BLCとDACを備えた完全にカスタムの画面があり、Bills and Adjustments画面にあるボタンからポップアップとして開きたいとします。私はクラスライブラリプロジェクトで私のカスタム画面のために、関連するすべてのDACとBLCを含めました請求書と調整画面のボタンからポップアップとしてカスタムAcumatica画面を開きます

public class APInvoiceEntryExt : PXGraphExtension<APInvoiceEntry> 
{ 

    public PXAction<APInvoice> LaunchOpenSource; 
    [PXButton(CommitChanges = true)] 
    [PXUIField(DisplayName = "Open Source")] 

    protected void launchOpenSource() 
    { 
     APInvoice apinvoice = (APInvoice)Base.Document.Current; 

     if (apinvoice != null) 
     { 

      //var url = "http://localhost/AcumaticaDB2562/?ScreenId=AC302000&OpenSourceName=Bills+and+Adjustments&DataID=" + apinvoice.RefNbr; 
      OpenSourceDataMaint graph = PXGraph.CreateInstance<OpenSourceDataMaint>(); 
      graph.OpenSourceDataHeader.Current = graph.OpenSourceDataHeader.Search<xTACOpenSourceHeader.openSourceName, xTACOpenSourceHeader.dataID>("Bills and Adjustments", apinvoice.RefNbr); 

      if (graph.OpenSourceDataHeader.Current != null) 
      { 
       throw new PXRedirectRequiredException(graph, "Open Source") 
       { 
        Mode = PXBaseRedirectException.WindowMode.NewWindow 
       }; 
      } 
     } 
    } 
}    

私は私は「法案と調整」画面をカスタマイズするために使用しています:以下のように私はそれをコード化していますボタンを追加します。私はスクリーンのために、関連するすべての権限を設定している

enter image description here

OpenSourceDataMaint BLCへ」を使用しています。

私がいる問題は、私は、ボタンを起動する、次のエラーメッセージが表示されますということです「権限別アクセス権」、「ユーザ別アクセス権」、「画面アクセス権」で「削除」を選択します。何も違いはありません。

答えて

0

解決策は、Visual Studioのクラスライブラリプロジェクトではなく、カスタマイズウィンドウにコード(以下に示す)を入れることでした。コードは別の公開されたカスタマイズへの参照を必要とするため、Acumaticaコードウィンドウ内に配置することでこれが処理されます。私のクラスライブラリプロジェクトで公開されたカスタム画面のカスタマイズへの参照はありません。これは明らかに問題を引き起こします。

public class APInvoiceEntryExt:PXGraphExtension<APInvoiceEntry> 
{ 

    public PXAction<APInvoice> LaunchOpenSource; 
    [PXButton(CommitChanges = true)] 
    [PXUIField(DisplayName = "Open Source")] 

    protected void launchOpenSource() 
    { 
     APInvoice apinvoice = (APInvoice)Base.Document.Current; 

     if (apinvoice != null) 
     { 
      AssistantController.OpenSourceDataMaint graph = PXGraph.CreateInstance<AssistantController.OpenSourceDataMaint>(); 
      graph.OpenSourceDataHeader.Current = graph.OpenSourceDataHeader.Search<AssistantController.xTACOpenSourceHeader.openSourceName 
                        ,AssistantController.xTACOpenSourceHeader.dataID>("Bills and Adjustments", apinvoice.RefNbr); 

      throw new PXRedirectRequiredException(graph, "Open Source") 
      { 
       Mode = PXBaseRedirectException.WindowMode.NewWindow 
      }; 
     } 
    } 
} 
0

DataSourceがあなたのOpenSourceDataMaintクラスオフフルネームに等しいGraphTypeとしてサイトマップ内のノードを検索しようとして失敗しているように見える:

public class PXBaseDataSource : DataSourceControl, IAttributeAccessor, INamingContainer, ICompositeControlDesignerAccessor, ICommandSource, IPXCallbackHandler, IPXScriptControl, IPXCallbackUpdatable, IPostBackDataHandler 
{ 
    ... 

    private static string getFormUrl(Type graphType) 
    { 
     PXSiteMapNode node = getSiteMapNode(graphType); 
     if (node == null) 
     { 
      throw new PXException(string.Format(ErrorMessages.GetLocal(ErrorMessages.NotEnoughRightsToAccessObject), graphType.Name)); 
     } 
     String url = node.Url; 
     //if (url.Contains("unum=")) url = PXUrl.IgnoreQueryParameter(url, "unum"); 
     return PXUrl.TrimUrl(url); 
    } 

    ... 
} 

TypeNameが正しくカスタムASPX内PXDataSourceに定義されているかどうかをチェックしてくださいでしたページ?また、カスタムAspxページがCst_Publishedフォルダにも存在するか、PXDataSource.TypeNameプロパティに設定された値がPagesおよびCst_Publishedフォルダ内で同一であるかどうか確認してください。

もう1つ確認すると、サイトマップ画面にカスタム画面の正しいグラフ名が表示されますか? - 検証のためのスクリーンショットを提供できる場合は有益です。

可能であれば、コンパイルされたアセンブリであってもローカルに公開できるカスタマイズパッケージを提供してください。これにより、調査プロセスが大幅に高速化されます。

+0

私は解決策を見つけました。これは、Webサイトで参照されているクラスライブラリプロジェクトではなく、カスタマイズマネージャのコードウィンドウにコードを配置することです。私は公開されたカスタマイズ(私たちのカスタム画面、BLC、およびDAC)への参照を持っている必要があるので、クラスライブラリプロジェクトとしてそれを行う方法がわかりません。 Acumaticaのコードウィンドウに配置すると、公開されているカスタム/新規画面のカスタマイズが既に存在するため、参照は有効です。 – pmfith

関連する問題