Dreamforce 2012に参加したよ - 4日目 -
Dreamforce 2012に参加したよ - 3日目 - - yonet77的な雑記帳の続きで4日目です。最終日です。
4日目(9/21)
この日の出来事はこんな感じでした。最終日ということでカルイ感じ(というか、もはや息切れ?)...ということで。(苦笑)
- Mini Hackのお題回答
- Salesforce Platform: Force.com Product Strategy And Roadmap(2)
Mini Hackのお題回答
Dreamforce 2012に参加したよ - Mini Hack - - yonet77的な雑記帳でも大体紹介してますが、Mini Hackのお題に回答してました。
回答したのは
の2つでした。
6つ全部考えるのは、やっぱり時間が足りなかったですね... まだまだ修行が足りない、ということで。(苦笑)
どれくらいの開発者が参加して、回答できたのが何番目だったのか..といったことは分かりませんが、回答した後にアンケート用紙みたいなヤツを記入してスタッフに渡して完了でした。
Salesforce Platform: Force.com Product Strategy And Roadmap(2)
一応最後のセッション...だったのですが、これまで割とPlatformの話を聞いてきてたので、その繰り返し...という印象がありました。。
大体のところは
- Salesforce Identity
- Force.com CanvasApp
- ChatterBox
といったあたりを話してる感じでした。
※あとは集中力が切れてたので、あまり聞き取れませんでした。。。すみません。
おしまい
初の海外出張、そして初めてのDreamforce参加で、浮き足立ったところがありましたが、浮き足立ってカルイ感じで参加できて良かったんじゃないか?と思ってます。
せっかく高い金を出してもらって参加しているので、色々と経験しないとモッタイナイ、ということもありますし。
単純に海外でテンション上がって、さらにテンション高めのイベントで色んな「熱」をもらってこれたと思います。その「熱」を失わずに、静かに持続させていきたいと思います。たぶん。
※こういうとこに行く度に「英語をもう少し自由に使えたらなー...」と思いますが、その熱はなかなか持続しないようです。。(苦笑)
Dreamforce 2012に参加したよ - 3日目 -
Dreamforce 2012に参加したよ - 2日目 - - yonet77的な雑記帳の続きで、3日目の内容です。
3日目(9/20)
参加したセッションはこんな感じでした。
- Introducing Play 2.0 Framework: Painless Java and Scala Web Applications
- Creating HTML5 Applications with jQuery Mobile, Ruby and Database.com
- Developer Keynote: The Salesforce Platform
- Keynote: Leadership-Taking Charge with General Colin Powell & GE CEO Jeff Immelt
Introducing Play 2.0 Framework: Painless Java and Scala Web Applications
このセッションは、Developer Theaterというオープンな会場で行われました。
「30分」という短い時間ということもあって、Play frameworkとScalaの紹介がメインでした。
それにしても、このセッションでは、"Force.com"という単語が全く出てこなかったですw(Herokuがちょこっと)そんな懐の深さもあるあたりが、Salesforceの良さなのかもしれません。
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.com
タイトルのまんまです。
サーバサイドとして"Database.com" + "Ruby on Rails"を使い、クライアントサイドとして"jQuery Mobile"を使ってアプリケーションを作ってみたよ!という内容です。
Database.com用のGemと、Rails用のGemが用意されているので、それを使いましょう、という具合で。
また、データベースとの連携は、上記のGemを使うので、Railsコマンドを実行する際には "--skip-active-record" を指定して、ActiveRecord関連のファイルを生成しないようにしています。
※Database.comへはREST APIで連携する感じになっています。
あとは、ViewとしてjQuery Mobileを使ってHTML5アプリを作ってみましょう〜というあたりでした。
この日のために作成したデモのソースはコチラで確認できます。
こういう構成でアプリを作ってみる、というのも面白いのではないでしょうか?
Developer Keynote: The Salesforce Platform
Developer Keynote!非常に人気のあったKeynoteで入れない人もいたとか....
あと、「Advanced Apex Programming」という書籍を無料で配布してました。太っ腹ー♪
最初から非常にテンションの高い内容で、もし日本でやったならこうはいかないなー...と痛烈に感じました。個人的には、こっちの雰囲気の方が好きですねww
Cloudforceでも、@mitsuhiroさんあたりがやって頂くと非常に良いのではないでしょうか?ww
内容としては
- Canvas App の紹介(Eclipse plugin for Heroku の紹介も)
- Touch Platform の紹介
- Salesforce Identity の紹介
- AppExchange 上でみんな稼ごうぜ!(Build Apps Not Invoicing Process, with Checkout)
といったあたりの話を熱く語ってくれてました。Checkout機能が十分使えるようになると、色々と便利になりそうですね〜。
あ、そういえばYoutubeで見ることができそうです。自分もまた見直そうかな...と思います。
Keynote: Leadership-Taking Charge with General Colin Powell & GE CEO Jeff Immelt
恥ずかしながら、英語がちゃんと聞き取れなくて、あまり分かりませんでした....
後でココを見て、どんな内容だったのか読み返した程度に未熟者です。。
番外(1)
この2つもセッションを申し込んでいたのですが、激しく寝坊したため、参加できず、でした。。
ぎゃふん (/++)/
- Architecting Multi-Org Solutions
- Real Programmers Use Apex
このうち、"Architecting Multi-Org Solutions"の方は資料をゲットできたので、後で読もうと思います。。。
この日は、一通りセッションが終わった後に、展示場の方を見学に行きました。(挨拶も兼ねて...)
ビールも飲んで、ラフな格好(サンダルとか)で遊びに行ったはいいけど、受け答えする人はスーツでビシッとしているので、ホント申し訳なかったです。。
ごめんなさい ごめんなさい。。
番外(2)
この日は、"Japan Night"という日本人が集まってワイワイ騒ぐ夜でした。
店内はちょっと薄暗くて、顔が判別できず...よく分からない会になってしまった印象です。。とりあえず、知り合いを見つけては飲んで話して...を繰り返すような感じでした。(苦笑)
営業せずに、本当に申し訳ありませんでした。
Dreamforce 2012に参加したよ - Mini Hack -
せっかく来たんだし、何かネタになるかも...と思って、Mini Hackに参加しました。
※参加、といっても単にMini Hackのお題が書かれたカードを手にすれば良いだけなのですが。。
Mini Hack自体は「笑点」のように(?)、予めお題が用意されていて、そのお題に答えて(コードを書いて)、Force.com Staff にデモしながらチェックしてもらう...という流れでした。
お題は6つあって、こんな感じでした。
- Visualforce + jQuery Mini Hack
- Force.com Mobile Mini Hack
- Force.com Integration Mini Hack
- Force.com Canvas Mini Hack
- Amazon Web Services Mini Hack
- New Relic Mini Hack
景品は
- MacBook Air : 6つ全部をクリアした人で先着1名
- Nexus 7 Tablet : 6つ全部をクリアした人で先着20名
- $50 Amex Gift Card : Force.comに関するお題(上の1.〜4.)のうち2つクリアした人で先着100名
- Amazon Gift Card(だったかな?) : Amazozn のMini Hackを答えた人
- New Relic Tシャツ : New Relic のMini Hackを答えた人
といった感じでした。
Mini Hackゾーンでは、電源&LANケーブルが完備されていて、Mini Hackに取り組んでいる方も、そうでない方も沢山いました。
基本的に、みんな黙々と何かしてるだけ...という感じでしたね。
個人的には、Force.comのお題を2つ(「1.」と「2.」)答えて、幸いにも$50 Amex Gift Card をゲットできました!
スタッフの方に説明するのも、しどろもどろでしたが、OKもらえて良かったですw
ちなみに、ギフトカードは家族へのお土産代として使わせて頂きました。多々感謝!
セッション聞きながらとか、時差ボケと戦ったりするのはちょっと疲れたけど、結果的には良かったです。
※単にGift Cardもらえたから満足しているだけなんですが...
Cloudforce 2012 Japanでも、Mini Hackをやるとかやらないとか...
Developerな方々は、ぜひ取り組んでみても良いのでは?w
Dreamforce 2012に参加したよ - 2日目 -
Dreamforce 2012に参加したよ - 1日目 - - yonet77的な雑記帳の続きで、2日目の内容です。
2日目 (9/19)
参加したセッションはこんな感じでした。
- Business is Social - Marc Benioff and Friends
- Advanced Asynchronous Apex
初日と比較して、いきなりガクッと減りました。。(苦笑)
※後で言い訳を追記します。
Business is Social - Marc Benioff and Friends
前半戦の山場であるBenioffのKeynote!非常に大きな会場にも関わらず、非常に混んでました。
(そのため、Wifiに全く繋がらず...でしたが。)
派手なステージショーとか、大幅な時間延長とか色々ありましたねw
今回は、製品の紹介が色々あったのではないかな?と思います。
- Marketing Cloud
- Work.com
- Chatter Community
- Salesforce Touch ..etc
マーケティングや人事管理の分野にまで展開しているのが印象的でした。
他の人が話してことですが、Salesforceがこれまで買収してきた Rypple や Radian6 をちゃんとSalesforceとつなげて、新しいソリューションとして世に出した、ということがサスガだなーと思いました。
サービスを着実にリリースしていく姿勢は見習わねばなりませぬ。。
あと、色々と分野を広げるのは非常に良いとは思いますが、それならば
- APIコール数
- データストレージ容量
の制約をもっと広げて欲しいかなー...と思った次第です。
いずれ、ERPをSalesforceで実現しようとしたときには、データストレージ容量は、かなりネックになるかと思います。
(中の人、よろしくお願いします...w)
Advanced Asynchronous Apex
非同期プログラミングへのススメ、みたいな話でした。
Apexプログラミングにおいて、同期 vs 非同期の方法としては、それぞれこんな感じになっているよ、と。
■Synchronous Framework:
- Triggers
- VisualForce Controllers
- Apex Web Services
- Testing
■Asynchronous Framework:
- @future
- Batch Apex
- Scheduled Apex
一般的に、非同期プログラミングは難しいとされているけど、使いこなせるようになると実装の自由度が増して、色々できるようになるよ!
という話だったかなー、と。(正直、英語が分からんかったです...)
難しいところとしては、こんなところがポイントじゃないの?という話でした。
- 実行順序
- 非同期処理のエラーハンドリング
- 非同期処理のテストコード
その他、Message Queueの話もありましたが、英語が聞き取れず状態ですみません。。
あと、Batch Apexでは、こんなところにも気をつけなきゃいけないよ、という話だったかと思います。。
- 並列処理じゃないよ
- ロールバックをどうするか?
正直、拙すぎて申し訳ないので、このネタでもう少し自分なりに深堀りしていきたいと思います....
番外(1)
一応、こんなセッションも申し込んでいました。
- Breakouts8: Building a Custom Formula Language on Heroku and Force.com
- Breakouts9: Choosing the Right Integration Strategy for Force.com
ただ、PCや携帯のバッテリーが切れていたことと、自分自身のバッテリーも切れていて、Moscone Center West 3Fの寛ぎスペースにて、充電しておりました。。このスペース、非常にリラックスできて、大変素晴らしいので、ぜひ次のCloudforce 2012 Japan でも取り入れて欲しいスペースです。
ただ、リラックスし過ぎて、意識がちょっと浪漫飛行してしまいました。
旅に出た意識が戻ってきた時には、既にアフターカーニバル状態でしたので、セッションに参加できず、Mini Hackしてました。。
(Mini Hackの話はまた後ほど...)
番外(2)
2日目は、Red Hot Chili Peppers の野外ライブがありました。
- Dreamforce Gala with the Red Hot Chili Peppers
実はレッチリの曲は詳しくない不届きモノなのですが、行くだけ行ってみようと〜。
途中でピザを買って、野外ライブ会場に着いたら、予想以上に人が多くて大変でした。。。
正直、レッチリといったら
くらいしか思いつかない程度で、本当にごめんなさいでした。。
Dreamforce 2012に参加したよ - 1日目 -
突然ですが、Dreamforce2012に参加してきました。
実はSan Franciscoに来るのは10数年ぶりでして、当時の記憶は幾分残ってましたが、泊まったホテルとかは思い出せず。。ちなみに、初めて1人旅したのがSan Franciscoだったので、勝手に感慨深く思ってましたw
それはさておき、Dreamforceは初参加でしたので、色々と圧倒されまくりな4日間でした。(あー疲れた...w)
(忘れないうちに)覚えている限りで所感を残しておこうと思います。
1日目 (9/18)
参加したセッションはこんな感じでした。
- Building Desktop & Mobile HTML5 Applications with Sencha and Force.com
- Apex Design Patterns
- Introduction to Force.com Canvas Apps
- Test Driven Development Fundamentals on Force.com
Building Desktop & Mobile HTML5 Applications with Sencha and Force.com
Javascript UI FrameworkであるSenchaを使って、Force.comと組み合わせて、いかにしてMobileアプリやらWebアプリを作りましょうか?といった話でした。
Salesforce.comでもSencha(というかExtJSといった方が良いかな?)は使われていて、開発者コンソールや、レポートビルダー等で見かけることができます。
その他、おそらくRemoteActionにも使われているのではないでしょうか?
自分もExtJSを使っておりまして...個人的には結構気に入ってます。
※ちなみに、ライセンス形態としては、商用版とオープンソース版の2種類が用意されています。
セッションの内容としては、このために書いた..と思われるブログが2つあって、それを見た方が早そうですのでご紹介します。
- Developing Mobile Applications with Force.com and Sencha Touch - Part 1 | Blog | Sencha
- Developing Mobile Applications with Force.com and Sencha Touch - Part 2 | Blog | Sencha
ちなみに、既に日本語訳までも!w(素晴らしいです)
- Force.comとSencha Touchを使ったモバイルアプリケーション開発 Part1 | 株式会社ゼノフィ
- Force.comとSencha Touchを使ったモバイルアプリケーション開発 Part2 | 株式会社ゼノフィ
個人的には、Part2 で取り上げられている "Step 8: Adjusting the Model and Adding a Data Proxy" が非常にタメになりました。
SalesforceでExtJS4を使ってみようか (1) - yonet77的な雑記帳にて、ExtJSからForce.comにデータを連携するProxyクラスを(頑張って)自作してましたが、"Step8"のやり方を勉強して、現在製作中のアプリをより良い方向に変えていきたいと思います。。
あと、発表して頂いた方に自分が作っている最中のアプリを紹介することができました。(I can't speak English.. なので、どこまで伝わったか疑問ですが。。)
汗かきながら説明している自分がなんだか滑稽でしたが、まぁせっかく来たんだし、と。
日本にもExtJSを使ってForce.com上でアプリ作っているヤツもいるんだゼ!と知らしめる(?)ことができて何よりでした。
Apex Design Patterns
GoFのデザインパターンをApexでやってみたよ!という類いの話です。
紹介したパターンはこんなところでした。
- Singleton
- Strategy
- Decorator
- Facade
- Composite
- Bulk State Transition(これは自作した...?)
ここでは、
- こんなところで問題が起きたよ
- このパターンを使えばいいんじゃない?
- コード書いてやってみよう!
という順番で各パターンを説明してました。
何を隠そう、デザインパターンは詳しくない(おい!)のですが、内容自体は割とよく見かける話でした。個人的にはCompositeパターンの例がなかなか面白かったです。
こんな感じにCompositeパターンを使った演算子の実装を紹介していました。
■実装
public interface Expression { Expression add(Expression expr); Expression set(String name, Boolean value); Boolean evaluate(); } public abstract class Composite implements Expression{ public List<Expression> children {get; private set;} public Composite(){ this.children = new List<Expression>(); } public Expression add(Expression expr){ children.add(expr); return this; } public Expression set(String name, Boolean value){ for(Expression expr : children) expr.set(name,value); return this; } public abstract Boolean evaluate(); public Boolean hasChildren{get{ return !children.isEmpty(); } } public class AndComposite extends Composite{ public override Boolean evaluate(){ for(Expression expr : children) if(!expr.evaluate()) return false; return true; } } public class OrComposite extends Composite{ public override Boolean evaluate(){ for(Expression expr : children) if(expr.evaluate()) return true; return false; } } public class Variable implements Expression{ public String name {get;private set;} public Boolean value {get;private set;} public Variable(String name){ this.name = name; } public Expression add(Expression expr){ return this; } public Expression set(String name, Boolean value){ if(this.name != null && this.name.equalsIgnoreCase(name)) this.value = value; return this; } public Boolean evaluate(){ return value; } }
■使用例:
//1 OR (2 AND 3) Expression expr = (new OrComposite()) .add(new Variable('1')) .add((new AndComposite()) .add(new Variable('2')) .add(new Variable('3')) ) .set('1',false) .set('2',true) .set('3',false); System.debug(expr.evaluate()); //FALSE OR (TRUE AND FALSE) => FALSE expr.set('3',true); System.debug(expr.evaluate()); //FALSE OR (TRUE AND TRUE) => TRUE
なるほどねーと思いました。そもそもの話で、GoFパターンをちゃんと理解しておかないとなーと常日頃思ってますので、引き続き精進しようと思います。。。
Introduction to Force.com Canvas Apps
このDreamforceで何度もデモを見させられたCanvas Appsの紹介でした。
New at Dreamforce 12: Force.com Canvasが参考になるのではないでしょうか。
すごーくざっくり言うと、"FacebookアプリのForce.com版"といった感じでしょうか。。
Canvasアプリを新たに作成するときには、テンプレートが用意されているので、それに従って作れば「あっ!」という間にHeroku上にCanvasアプリが作成されます。
既にあるものをForce.comに組み込むこともできるみたいです。
ここらへんの情報は色々出回っているので、既にご存知かと思いますが、最後に大事なポイントを。
Test Driven Development Fundamentals on Force.com
TDDの基礎...という感じでした。"on Force.com"とありますが、別にForce.comに限った話ではなく、割と一般的な話でした。とはいっても、非常に大事なテーマなので、どっかの誰かに聞かせてやりたい気持ちで一杯です。
大きなポイントとしては、
といった"黄金の回転"を回し続けていくことが大事なんだよ、ということを語ってくれていました。
セッションでは、この回転を途中まで紹介して、残りの回転は各自(以下を参考にして)やってみよう!という締めでした。
knthornt/Dreamforce-2012---TDD-Session · GitHub
最後に、質問セッションにて「TDDの中で、リファクタする最も良いタイミングはどう思いますか?」的な質問を投げてみました。
回答としては(多分)「テストがGreenになった後ならいつでもいいと思うし、自分で『このコード気持ち悪いな』と思ったらリファクタすべきじゃないかな」といった感じでした。(英語を全て聞き取れなかった... orz)
とにかく
マイクを手に取って、英語で質問する
ということを経験してみたかったので、内容はさておき、緊張感Maxの状態でやり遂げられて良かった...と思います。(すげー汗かきました...)
とまぁ、1日目としてはこんな感じでした。2日目以降はそのうち....
インストールしたパッケージをカスタマイズする上でハマったこと
Force.com上で開発していく上で、パッケージをカスタマイズしていくことも多々あるのではないでしょうか?
(当方、glovia OrderManagementをカスタマイズすることが多いですが...)
そんなパッケージのカスタマイズの中で、思わぬ出来事に遭遇しましたのでご紹介しようかと。
結論から先に言うと...
ということです。
※予期せぬ例外が発生することもあるので避けるべき、ということです。
具体例
準備
今回発生したケースの前提です。
- パッケージ管理内で、「Status__c」というAPI名がテキスト型として定義されている(実際には、xxx__Status__c というAPI名になります)
- 上記のオブジェクトにカスタム項目として「Status__c」を選択リスト型として追加する
パッケージ内のオブジェクトとしては、こんな項目が定義されたようになります。
- xxx__Status__c(テキスト型)
- Status__c(選択リスト型)
ここで、さらに入力規則 or 項目自動更新で、「Status__c」を数式に使ってみます。例えば
IF( TEXT ( Status__c ) = 'xxxx', 100, 0);
という感じの数式を埋め込んでみます。
※ココでは、新たに追加した選択リスト型のStatus__cを使う感じです。
例外発生!
項目自動更新が実行されると、こんなエラーが発生するようになりました。
このレコードを保存するとき、ワークフローまたは承認プロセスの項目自動更新によるエラーが発生しました。(中略)
関数 'TEXT()' のパラメータが間違っています。期待数字, 日付, DateTime, 選択リスト、受信テキスト
え?
関数 TEXT() は選択リスト型で使用しているのに、なぜこんなエラーがッ...!?
大まかに書くと、こんな感じの現象でしょうか。。
原因は?
管理パッケージ内のトリガが起動したとき、それに併せて入力規則(パッケージ管理外で定義された入力規則も含めて)が評価されると思います。
入力規則を評価する際に、パッケージ内のトリガで発生してきた場合にはパッケージ内の項目を優先的に参照するのではないでしょうか?
(ただ、標準のSalesforce画面からデータ操作した場合、エラーなく処理されることもあったりと良く分からない・・ところもあります。すみません。。。)
回避策は?
結局のところ、
パッケージ内で定義されているAPI名で項目を追加するのは避けましょう
に尽きると思います。
今回の例でいうと、
- パッケージ内では Status__c(テキスト)で定義されている。(外部からは xxx__Status__c)
- パッケージ外で Status__c(選択リスト)で定義する
ということは止めましょう、という話ですね。
ただ、上記の現象とは別に、類似した名称で定義するのは混乱の火種になりかねないので、名前付けは熟考しましょう、ということですね。
※当たり前すぎる話でオチもないですが・・(苦笑)
最後に
一応、Salesforceに問い合わせたところ、既知の不具合のようで将来的なリリースにて修正予定とのことでした。(時期は未定)
そんなわけで、しばらくは
類似したAPI名を使うのは避ける
という回避策で逃げましょう。
今回はパッケージをカスタマイズしていく上でハマったお話でした。
ではでは〜
Glovia Order Management (on Salesforce) を使ってみようか (10)
久々のgOMネタでも更新します。
本日のネタは開発者よりのネタです。
gOMをカスタマイズするならコレだけは知っとけ
的なネタです。
gOMで用意している機能をApexから利用する
gOMには様々な機能が定義されており、色んなところで使われてます。ざっと見渡しても、こんな機能が思い浮かぶのではないでしょうか?
- 受注残消し込み(いわゆる在庫引当)
- Quick梱包
- Quick出荷
- 出荷確認
- 請求書作成 ....etc
gOMをカスタマイズしながらも、gOM内で想定しているデータの流れに乗っかっていくには、これらの機能をApexから利用することは避けられ...ないでしょう。
というか、自前で作るのは超面倒ですし、gOMのアップグレードに伴って、いちいち修正していくのは...これまた現実的ではありません。。
というわけで、gOMで定義されている機能をApexから呼び出す方法についてご紹介しようと思います!gOMをカスタマイズしていく上で、知っておくと色々と便利かと思います(たぶん)。
※1 JoJo風に言えば、この辺りで、「ドギャーン!」とか擬態音を入れたいところですが、控えます。(ゴゴゴゴゴ..!!)
※2 このあたりはGlovia社の方にもご協力頂きました。多々感謝です!
gOMで定義している機能の利用方法
受注残消し込み
gii.inventoryReserve.clearBackorder(LIST<Id> inventoryReserveId);
- 第1引数: 処理対象となる在庫予約のIdのList
在庫予約
gii.inventoryReserve.reservation(LIST<Id> salesOrderLineId);
- 第1引数: 処理対象となる販売オーダラインのIdのList
Quick梱包
gii.inventoryPack.createPackList(LIST<Id> selectedRecordIds, String groupBy, String IvStatus, String calledFrom);
- 第1引数: 処理対象となる在庫予約のIdのList
- 第2引数: 集約単位(販売オーダ毎の場合、'SalesOrder' と指定 それ以外は知らない...)
- 第3引数: 'Reserved' を指定 それ以外は知らない...
- 第4引数: ''を指定 本来はコール元の画面等を指定するみたいだけど、ブランクでも可
梱包指示確認
gii.inventoryPack.confirmPackList(LIST<Id> selectedRecordIds);
- 第1引数: 処理対象となる梱包指示のIdのList
梱包指示キャンセル
gii.Cancellation.cancelPacklist(SET<Id> PackListId, String calledFrom);
- 第1引数: 処理対象となる梱包指示のIdのSet
- 第2引数: ''を指定 本来はコール元の画面等を指定するみたいだけど、ブランクでも可
出荷確認
gii.packListShipment.shipPackList(LIST<Id> selectedRecordIds, String groupByAndShippedDate, String calledFrom);
- 第1引数: 処理対象となる出荷指示のIdのList
- 第2引数: 集約単位(販売オーダ)と日付(出荷日)を指定 例)'SalesOrder;2012-08-20'
- 第3引数: ''を指定 本来はコール元の画面等を指定するみたいだけど、ブランクでも可
Quick出荷
gii.inventoryReserve.quickShip(LIST<Id> selectedRecordIds, String groupByandShippedDate);
- 第1引数: 処理対象となる在庫予約のIdのList
- 第2引数: 集約単位(販売オーダ)と日付(出荷日)を指定 例)'SalesOrder;2012-08-20'
請求書作成
gii.OrderInvoicing.createInvoice(LIST selectedRecordIds, String groupByandInvoiceDate);
- 第1引数: 処理対象となる請求書作成準備のIdのList
- 第2引数: 集約単位(販売オーダ or 取引先)と日付(請求日)を指定 例)'SalesOrder;2012-08-20', 'Account;2012-08-15'
補足です
上記に書いた内容は、自分がよく使っていた範囲の内容となります。パッと見た感じでは、「出庫」に関する機能もApexから利用できると思います。
調べた方法に関しては...泥臭いですが、gOMをインストールした環境で、Apexクラスを参照して自分で試してみたりしました。もちろん中身は参照できないので、名前だけで判断することになりますが。。(苦笑)
例えば、こんなところから「くさいなー」という雰囲気を感じたらテストコード書いて試してみたり...ですね。
そこから推測したりしながら、適当に試してみる感じです。。
※もちろん、この他にGlovia社に問い合わせることもしました。
最後に
ちなみに、先日Glovia社に伺ったところ、gOM内で定義している機能はAPIとして公開しようと考えているそうです。(時期までは分かりませんが)
そんなわけで、それが公開されたら、このエントリも不要となりますね。。(苦笑)
まぁ、そんな期間限定的なエントリということでした。
それではより楽しい(?)gOMカスタマイズを!