2016-12-29 20 views
0

私はアクションボタン、アドオンへのAddFollowUpでカスタマイズのためのコードを書こうとしています。私がしたい:カスタムフィールドはUsrNextFollwup呼ばカスタマイズにカスタム行を挿入して追加するにはどうすればよいですか?

  1. アップデート - 私は、オブジェクトのカスタムフィールドへのアクセス方法>?
  2. PXSelect <で見つけたオブジェクトを更新できますが、新しいオブジェクトを挿入する方法はありますか?例えば私が連絡先myContact=new Contact();を作成した場合//プロパティを設定するなど - >どうすれば挿入できますか?
  3. どのようにして現在のユーザーのIDを見つけることができますか?私はコンタクトcurLead=Base.LeadCurrent.SelectSingle()から現在のリードを得ることができますが、私はまた、@ ME関数のようなものが欲しいです。

マイコード:Acumaticaのカスタムフィールドで

public class LeadMaint_Extension:PXGraphExtension<LeadMaint> 
{ 
public PXAction<PX.Objects.CR.Contact> AddFollowUp; 
public PXSelect<CRActivity> Task; 

[PXButton(CommitChanges = true)] 
[PXUIField(DisplayName = "Add FollowUp")] 
public void addFollowUp() 
{   
    Contact curLead=Base.LeadCurrent.SelectSingle(); 
    DateTime dueDate = DateTime.Now; 
    curLead.CreatedDateTime = dueDate.AddDays(14); //works great 
    curLead.UsrNextFollwup = dueDate.AddDays(14); //doesn't work 
} 
} 

答えて

1

は、DACの拡張で宣言されています。 DAC拡張オブジェクトにアクセスするには、次の方法を使用することができます。

  1. GetExtension()各DACインスタンスで使用可能な一般的な方法:

    ContactExt contactExt = curLead.GetExtension<ContactExt>(); 
    
  2. GetExtension(オブジェクト)内で宣言され、一般的な方法非ジェネリックPXCacheクラス

    ContactExt contactExt = Base.LeadCurrent.Cache.GetExtension<ContactExt>(curLead); 
    

    または

    ContactExt contactExt = Base.Caches[typeof(Contact)].GetExtension<ContactExt>(curLead); 
    
  3. GetExtension(オブジェクト)PXCacheジェネリッククラスの静的ジェネリックメソッド

    ContactExt contactExt = PXCache<Contact>.GetExtension<ContactExt>(curLead); 
    

、更新を挿入するか、DACのレコードを削除する、一つは、挿入を呼び出す更新または適切なPXCacheのメソッドを削除しなければなりませんインスタンス(またはデータビュー、単に呼び出しをPXCacheにリダイレクトする - >ShipmentLines.Insert(line)ShipmentLines.Cache.Insert(line)ステートメントに相当)です。たとえば、次のように、コード内のキャッシュにデータレコードを挿入するために、データビューの挿入()メソッドを呼び出します。

ShipmentLine line = new ShipmentLine(); 
line.ProductID = card.ProductID; 
... 
ShipmentLines.Insert(line); 

などBranchID、ユーザーIDとユーザー名などの一部のアプリケーションの設定は、Accessinfo経由でアクセスできますPXGraphクラスのプロパティです。 Accessinfoプロパティは、のインスタンスを返します。AccessInfo DAC - AccessInfo.UserIDは、現在のユーザーのIDを返します。 BLC拡張機能からAccessinfoプロパティにアクセスするには、Base.Accessinfoステートメント

開始バージョンを使用します。 5 Acumaticaはランタイムコンパイルを導入しました。これにより、現在適用されているカスタマイズプロジェクトにDLLが含まれていない場合に、IISアプリケーションプールを強制的に再起動しなくてもカスタマイズを公開できます。ランタイムコンパイルがリリースされる前に、カスタマイズマネージャはWebサイトのApp_Code \ Cachesフォルダにすべてのコードファイルを作成しました。 Asp.Netランタイムは、App_Code \ Cachesフォルダに作成されたコードファイルを処理し、すぐにコンパイルしてIISアプリケーションプールを再起動して、Acumatica Webサイトのすべての変更をすぐに反映させます。このアプローチの美しさは、App_Code \ Cachesフォルダにあるすべてのファイルで宣言されたすべてのクラスがVS IntelliSenseで利用可能であり、潜在的な問題として赤い下線でハイライトされないことです。唯一の欠点 - App_Code \ Cachesフォルダ内で何らかの変更を加えるたびに、IISアプリケーションプールが再起動します(Binフォルダにあるdllを再コンパイルした場合と同じこと)。ウェブサイトが再起動するまでに時間がかかりますあなたの変更。

実行時のコンパイルを実行すると、AcumaticaはすべてのコードファイルをWebサイトのApp_RuntimeCodeフォルダに作成しました。今度は、すべてのコードファイルをApp_RuntimeCodeフォルダからアセンブリにコンパイルし、実行時にIISアプリケーションプールを再起動せずにロードするAcumaticaの責任があります。この方法では、カスタマイズを変更するたびにウェブサイトが再起動するのを待つ必要はありません。一方、実行時の複雑さが、以前のコードファイルで何が行われたかを随時適切に解決するとは限らない場合は、手動でアプリケーションプールをリサイクルしたり、開発者マシンでIISを再起動して、Acumatica App_RuntimeCodeフォルダの実際のコード。もう1つの欠点は、VS IntelliSenseによるサポートの欠如です。App_RuntimeCodeフォルダにあるファイルで宣言されたすべてのクラスは、IntelliSenseによって提案されることはなく、潜在的な問題として赤いアンダーラインで強調表示されます。 moの問題でコンパイルされます。

は、自動的にApp_Code \キャッシュフォルダに作成されたすべてのカスタマイズファイルを持っているだけでweb.configファイルでのappSettingsに以下のキーを追加して、開発のウェブサイト上でランタイムのコンパイルを無効にするには: <add key="UseRuntimeCompilation" value="false" />

+0

感謝を見るために。私が持っていたと思われる問題は、拡張機能がApp_RuntimeCodeディレクトリに配置されていることがインテリセンスを無視しているように見えるということに関連しています。連絡先curLead = Base.LeadCurrent.SelectSingle(); var ext = curLead.GetExtension (); PX_Objects_Cr_Contact_extensions.csをApp_RuntimeCodeからApp_Dataに移動しない限り、は存在しません。これを行うより良い方法はありますか? – AcumaticaGuy

+0

@AcumaticaGuy、上記の更新された回答をご確認ください – RuslanDev

関連する問題