新規記事の投稿を行うことで、非表示にすることが可能です。
2017年01月07日
ネットスイートガバナンス制限
ネットスイートには制限もある。
大体、Usage制限と処理時間制限、もちろん、API制限もあるが、
今回、Usage制限と処理時間制限について説明します。
バッチ処理の場合、定期スクリプトで実装されます。
定期スクリプトの場合、1回当たりの実行でUsageが10,000まで、処理時間が3600秒まですが、
再スケジュールでそのUsageと処理時間をリセットすることができます。
目次
定期スクリプトの場合、1回当たりの実行でUsageが10,000まで
Suitletスクリプトの場合、1回当たりの実行でUsageが10,00まで
定期スクリプトの場合、1回当たりの実行で処理時間が3600秒まで
Suitletスクリプトの場合、1回当たりの実行でUsageが300秒まで
再スケジュールでそのUsageと処理時間をリセットすることができます
なお、リカバリポイント作成にについて最大50MBの状態が保持されます。
よって、不要になったパラメータをnullにしたりしてスクリプトを軽くする必要があります。
もともとの文章
nlapiYieldScript()
Creates a recovery point and then reschedules the script.
The newly rescheduled script has its governance units reset,
and is then placed at the back of the scheduled script queue.
To summarize, nlapiYieldScript works as follows:
理解すると
nlapiYieldScript()は定期スクリプトの再スケジュールで使われます。
このAPIの実行で、
@リカバリポイント作成
A新しい定期スクリプトを起動
B新しい定期スクリプトに@を渡す
って感じ
例にすると
function runScheduledScript(status, queueid)
{
var records = nlapiSearchRecord('customer', 15);
for( var i = 0; i < records.length; i++ )
{
handleCustomer(records[i].getRecordType(), records[i].getId());
if( (i % 5) == 0 ) setRecoveryPoint(); //every 5 customers, we want to set a recovery point so that, in case of an unexpected server failure, we resume from the current "i" index instead of 0
checkGovernance();
}
}
/*********************************************************************************************************/
function setRecoveryPoint()
{
var state = nlapiSetRecoveryPoint(); //100 point governance
if( state.status == 'SUCCESS' ) return; //we successfully create a new recovery point
if( state.status == 'RESUME' ) //a recovery point was previously set, we are resuming due to some unforeseen error
{
nlapiLogExecution("ERROR", "Resuming script because of " + state.reason+". Size = "+ state.size);
handleScriptRecovery();
}
else if ( state.status == 'FAILURE' ) //we failed to create a new recovery point
{
nlapiLogExecution("ERROR","Failed to create recovery point. Reason = "+state.reason + " / Size = "+ state.size);
handleRecoveryFailure(state);
}
}
/*********************************************************************************************************/
function checkGovernance()
{
var context = nlapiGetContext();
if( context.getRemainingUsage() < myGovernanceThreshold )
{
var state = nlapiYieldScript();
if( state.status == 'FAILURE'
{
nlapiLogExecution("ERROR","Failed to yield script, exiting: Reason = "+state.reason + " / Size = "+ state.size);
throw "Failed to yield script";
}
else if ( state.status == 'RESUME' )
{
nlapiLogExecution("AUDIT", "Resuming script because of " + state.reason+". Size = "+ state.size);
}
// state.status will never be SUCCESS because a success would imply a yield has occurred. The equivalent response would be yield
}
}
/*********************************************************************************************************/
function handleRecoverFailure(failure)
{
if( failure.reason == 'SS_MAJOR_RELEASE" ) throw "Major Update of NetSuite in progress, shutting down all processes";
if( failure.reason == 'SS_CANCELLED' ) throw "Script Cancelled due to UI interaction";
if( failure.reason == 'SS_EXCESSIVE_MEMORY_FOOTPRINT ) { cleanUpMemory(); setRecoveryPoint(); }//avoid infinite loop
if( failure.reason == 'SS_DISALLOWED_OBJECT_REFERENCE' ) throw "Could not set recovery point because of a reference to a non-recoverable object: "+ failure.information;
}
/*********************************************************************************************************/
function cleanUpMemory(){...set references to null, dump values seen in maps, etc}
/**nullにする一例*************************************************************************************/
var largeFile = nlapiLoadRecord('1234');
var pdf = nlapiXMLToPDF(largeFile);
largeFile = null;
nlapiYieldScript();
大体、Usage制限と処理時間制限、もちろん、API制限もあるが、
今回、Usage制限と処理時間制限について説明します。
バッチ処理の場合、定期スクリプトで実装されます。
定期スクリプトの場合、1回当たりの実行でUsageが10,000まで、処理時間が3600秒まですが、
再スケジュールでそのUsageと処理時間をリセットすることができます。
目次
- Usage制限
- 処理時間制限
- 対策
Usage制限
定期スクリプトの場合、1回当たりの実行でUsageが10,000まで
Suitletスクリプトの場合、1回当たりの実行でUsageが10,00まで
処理時間制限
定期スクリプトの場合、1回当たりの実行で処理時間が3600秒まで
Suitletスクリプトの場合、1回当たりの実行でUsageが300秒まで
対策
再スケジュールでそのUsageと処理時間をリセットすることができます
なお、リカバリポイント作成にについて最大50MBの状態が保持されます。
よって、不要になったパラメータをnullにしたりしてスクリプトを軽くする必要があります。
もともとの文章
nlapiYieldScript()
Creates a recovery point and then reschedules the script.
The newly rescheduled script has its governance units reset,
and is then placed at the back of the scheduled script queue.
To summarize, nlapiYieldScript works as follows:
理解すると
nlapiYieldScript()は定期スクリプトの再スケジュールで使われます。
このAPIの実行で、
@リカバリポイント作成
A新しい定期スクリプトを起動
B新しい定期スクリプトに@を渡す
って感じ
例にすると
function runScheduledScript(status, queueid)
{
var records = nlapiSearchRecord('customer', 15);
for( var i = 0; i < records.length; i++ )
{
handleCustomer(records[i].getRecordType(), records[i].getId());
if( (i % 5) == 0 ) setRecoveryPoint(); //every 5 customers, we want to set a recovery point so that, in case of an unexpected server failure, we resume from the current "i" index instead of 0
checkGovernance();
}
}
/*********************************************************************************************************/
function setRecoveryPoint()
{
var state = nlapiSetRecoveryPoint(); //100 point governance
if( state.status == 'SUCCESS' ) return; //we successfully create a new recovery point
if( state.status == 'RESUME' ) //a recovery point was previously set, we are resuming due to some unforeseen error
{
nlapiLogExecution("ERROR", "Resuming script because of " + state.reason+". Size = "+ state.size);
handleScriptRecovery();
}
else if ( state.status == 'FAILURE' ) //we failed to create a new recovery point
{
nlapiLogExecution("ERROR","Failed to create recovery point. Reason = "+state.reason + " / Size = "+ state.size);
handleRecoveryFailure(state);
}
}
/*********************************************************************************************************/
function checkGovernance()
{
var context = nlapiGetContext();
if( context.getRemainingUsage() < myGovernanceThreshold )
{
var state = nlapiYieldScript();
if( state.status == 'FAILURE'
{
nlapiLogExecution("ERROR","Failed to yield script, exiting: Reason = "+state.reason + " / Size = "+ state.size);
throw "Failed to yield script";
}
else if ( state.status == 'RESUME' )
{
nlapiLogExecution("AUDIT", "Resuming script because of " + state.reason+". Size = "+ state.size);
}
// state.status will never be SUCCESS because a success would imply a yield has occurred. The equivalent response would be yield
}
}
/*********************************************************************************************************/
function handleRecoverFailure(failure)
{
if( failure.reason == 'SS_MAJOR_RELEASE" ) throw "Major Update of NetSuite in progress, shutting down all processes";
if( failure.reason == 'SS_CANCELLED' ) throw "Script Cancelled due to UI interaction";
if( failure.reason == 'SS_EXCESSIVE_MEMORY_FOOTPRINT ) { cleanUpMemory(); setRecoveryPoint(); }//avoid infinite loop
if( failure.reason == 'SS_DISALLOWED_OBJECT_REFERENCE' ) throw "Could not set recovery point because of a reference to a non-recoverable object: "+ failure.information;
}
/*********************************************************************************************************/
function cleanUpMemory(){...set references to null, dump values seen in maps, etc}
/**nullにする一例*************************************************************************************/
var largeFile = nlapiLoadRecord('1234');
var pdf = nlapiXMLToPDF(largeFile);
largeFile = null;
nlapiYieldScript();
【このカテゴリーの最新記事】
-
no image
2016年12月16日
ネットスイート保存検索の条件文
今日もネットスイートの保存検索について
話します。
保存検索の条件を作る時に対象のトランザクション(標準オブジェクトの呼び方)
の項目をPickuplistから選べるし、Formula(計算式)で
OraclのCASEステートメントを使用可能。
Formula(計算式)が3種類
ということで4種類です(笑)
私、いつも数値の計算式で条件を作成している。
例1:
計算式(数値)が1と等しいとする。
式:CASE WHEN {日付項目API参照名を例} IS NOT NULL
THEN 1
END
例2:
計算式(数値)が1と等しいとする。
式:CASE WHEN {日付項目API参照名を例} >= {today}
THEN 1
ELSE 0
END
例3:
計算式(数値)が1と等しいとする。
式:CASE WHEN {日付項目API参照名を例} IS NOT NULL
THEN CASE WHEN {日付項目API参照名を例} >= {today}
THEN 1 END
ELSE 0
END
これを使って、ソースに条件を追加しなくて、解決できることが多いから、
結構楽。
最近、ソースの行数を減らすことに工夫しているから、できるだけソースを書かないようにしている〜〜
興味のある方、使ってみてください。
var formula = "case when {internalid} IN (10555) then '1'"
+ " when {internalid} IN (10556) then '0'"
+ " when {internalid} IN (10557) then '1'"
+ " else '0' end";
var filter = new nlobjSearchFilter('formulatext', null, 'is', '1').setFormula(formula);
var filters = new Array()
filters[0] = new nlobjSearchFilter('tranId', null, 'is', request.getParameter('order_number') );
var columns = new Array();
columns[0] = new nlobjSearchColumn( 'internalId' )
var results =nlapiSearchRecord('invoice', null, filters, columns );// null のところはレコードID、指定しない意味
これは請求書に対して、idを指定せずに条件と抽出したい項目の保存検索を呼び出している例です。
赤字のところはソースに書く場合、これは普通にソース書かなくても
保存検索の条件文に追加もできるとのことです。
ソース好きなら、書いても構わないっす。
それでは 管理人 けん でした。
話します。
保存検索の条件を作る時に対象のトランザクション(標準オブジェクトの呼び方)
の項目をPickuplistから選べるし、Formula(計算式)で
OraclのCASEステートメントを使用可能。
Formula(計算式)が3種類
- 文字列
- 数値
- 日付
- 金額
ということで4種類です(笑)
私、いつも数値の計算式で条件を作成している。
例1:
計算式(数値)が1と等しいとする。
式:CASE WHEN {日付項目API参照名を例} IS NOT NULL
THEN 1
END
例2:
計算式(数値)が1と等しいとする。
式:CASE WHEN {日付項目API参照名を例} >= {today}
THEN 1
ELSE 0
END
例3:
計算式(数値)が1と等しいとする。
式:CASE WHEN {日付項目API参照名を例} IS NOT NULL
THEN CASE WHEN {日付項目API参照名を例} >= {today}
THEN 1 END
ELSE 0
END
これを使って、ソースに条件を追加しなくて、解決できることが多いから、
結構楽。
最近、ソースの行数を減らすことに工夫しているから、できるだけソースを書かないようにしている〜〜
興味のある方、使ってみてください。
var formula = "case when {internalid} IN (10555) then '1'"
+ " when {internalid} IN (10556) then '0'"
+ " when {internalid} IN (10557) then '1'"
+ " else '0' end";
var filter = new nlobjSearchFilter('formulatext', null, 'is', '1').setFormula(formula);
var filters = new Array()
filters[0] = new nlobjSearchFilter('tranId', null, 'is', request.getParameter('order_number') );
var columns = new Array();
columns[0] = new nlobjSearchColumn( 'internalId' )
var results =nlapiSearchRecord('invoice', null, filters, columns );// null のところはレコードID、指定しない意味
これは請求書に対して、idを指定せずに条件と抽出したい項目の保存検索を呼び出している例です。
赤字のところはソースに書く場合、これは普通にソース書かなくても
保存検索の条件文に追加もできるとのことです。
ソース好きなら、書いても構わないっす。
それでは 管理人 けん でした。
2016年12月01日
ネットスイートカスタムフィールドビューのみ
フィールの表示モード
ネットスイートカスタムフィールドって知っていますよね?
カスタマイズフォームを作成できるよね?
しかし、フォームにフィールドを追加し、編集できない状態にすることができるでしょうか?
今日、作ったフォームにフィールドを追加し、表示だけにすることを公開します。
この記事の目次
● ソースoverview
● ソースサンプル
● まとめ
ソースoverview
1:クライアントタイプのスクリプト
2:カスタマイズのフォームを作成する。
3:フォームカスタマイズフィールドを追加する。
ソースサンプル
// function userEventCreateButton(type, form, request){
try{
if (request.getMethod() == 'GET' )
{
var form = nlapiCreateForm("カスタムフォーム");//カスタムフォームの作成
//inlineの設定により、フォームにreadonlyになる感じ、編集できない。
//フォームフィールを追加
form.addField('custpage_location','text','フィールドラベル名',null).setDisplayType('inline');
}
else{
}
}catch(e){
nlapiLogExecution('error','suiteScript() has encountered an error.',errText(e));
}
}
まとめ
setDisplayTypeをinlineにすれば、
表示だけになる。ってまとめでした。
それでは 管理人 けん でした。
2016年11月25日
ネットスーイトの保存検索でDBデータを捜査する
ネットスーイトの保存検索大好きなkenです。
salesforceとか、VABとかを使って開発したことのあるS.E.が知っていると思いますが
クエリを使うですよね。開発時にはまだ全然、構わないけど、保守に入ると、クエリを
編集することになる。誰でもが保守嫌いやね。
ネットスーイトの保存検索を使ってから、本当にSublime text3のように恋に落ちた!!
理由は今日のPostで説明します。
この記事の目次
● >保存検索(save searchs)とは
● 何ができる?
● 例
● 言い放題
保存検索(save searchs)とは
保存検索とは前もってDBを検索するクエリをUIで作成して、IDを定義し持たせる、定義したIDの前に自動的に
custsearch_定義したIDとなる、このIdをInvoke(呼び出し)、DBを捜査した結果をソースの中で直接使える。
イメージし難いと思いますが、この下に例を書きます。
何ができる?
できることはクリック作業によって、DBを検索することができる、さらにEXCELやPDFや印刷という
三つの機能が保存検索の結果画面にアイコンとして標準機能がついている。
保存検索といったら、イメージはsalesforceのApexでいうと
List
ネットスーイトの保存検索はこんな作業はソースにクエリを書かなくても
ネットスーイトのUIで
1:保存検索を新規作成し、保存検索のIdを定義
(例:_account_list、保存後:custsearch_account_listになる)
2:検索対象をaccountにして、 (1例、他の対象としてはトランザクションとか、契約とかも可能)
3:条件を画面でaccountのidに対して追加、要望によって色々できます、nameとか、日付を範囲で指定とか
4:保存する。
画面で作った保存検索を表示すると
accountの一覧になり、左上にEXECLやPDFや印刷のアイコンがついて、クリックすると一覧がoutput簡単に
できます。
保存検索で出した結果はsalesforceの上の例のクエリ結果accListと同じ効果のイメージ
あるいは、UIで保存検索を一部作って、残りの部分はカスタマイズにして、できることが広くなる。
下記の例は保存検索を前もっと作成した。保存検索のIdを使って、保存検索をソース内でInvoke(呼び出す)
例
01://この例はcustomerに対する検索する。保存検索を作成する時に顧客(customer)を対象とする。
02:// クエリ:[SELECT Id, Name FROM objectAPI(例 account) WHERE id = '例のId']
03:var filters = new Array();//クエリのWHERE部分に該当する
04:var columns = new Array();//クエリの対象フィールド名に該当する(Id, name)
05:columns[0] = new nlobjSearchColumn( 'balance' );// customer objectのフィールド名
06:columns[1] = new nlobjSearchColumn( 'entityid' );
07:columns[2] = new nlobjSearchColumn( 'email' );
08:columns[3] = new nlobjSearchColumn( 'phone' );
09:var searchresults = nlapiSearchRecord( null, 作成した保存検索のID, filters, columns );
10:// 検索した結果をsalesforceのようにループで回して、使うとか
11:for (var i = 0; searchresults != null && i < searchresults.length; i++) {
12: var vendorcost = searchresults[i].getValue(columns[3]); // phoneフィールドの値を取得
13: // または下記のように
14: var searchresult = searchresults[i];
15: var phoneValue = searchresult.getValue('phone');//っていう取得方法、これ好き!!!
16:}
言い放題
SFDCでもNetSuiteでも、自動コーティングに近づこうとしていると思っている。
プログラマーの存在は何年後にどうなるかわからない。何があろうが、autoになっても
自動化にしたのが人間です。自動機能に負けるわけがない。
もし、プログラムに興味があるなら、仕事で活躍したいなら、ぜひお友達になりましょう。
プログラムは簡単だし、英文字を書くだけです^^。給料も高い〜〜、残業はよく出るって聞いたりする
かもしれないが、それは事実です。バカ多いから。やりたいことを4時間かけてもできないから。
自分が基本的に定時に帰るように効率を上げて、むしろ、緊急対応がなければ、ほぼ毎日早く1日のタスク
を95%完了し、携帯を遊んでいる。音楽も聴いたりします。最後のところにささっと残りの5%を完了し
帰りまーすって感じ^^。こんなレベルくるまでには人によってかかる時間が変わってくると思います。
私は1年くらいかな。相当に頑張ったから。今の楽さをもらったわけ。でもただ1年です。
今はどんな言語(apexであろう、java,js,lisp etc.)でも来いや、少々使ったらすぐ慣れる。
ITの仕事の原因で今、英語の能力もアップしたと思います。変数の定義ですごい勉強になる。
本気で職業エンジニアを目指す方のためのプログラミングスクール【ELITES(エリーツ)】
それでは 管理人 けん でした。
タグ:ネットスーイト 保存検索 保存検索
2016年11月23日
ネットスーイトカスタマイズSublist
ネットスーイトのSuiteletでサブリストをカスタマイズフォームに追加してから、
それぞれの値をセットしたら上で完璧ではないよー
まだ色々問題が出てくるはず、それは何かというと
今回、例で説明します。
この記事の目次
● サブリスト例
● あった問題
● 解決方法
function UpdateSalesOrder(request, response) {
var form,sublist;
//GET
if (request.getMethod() == 'GET')
{
//create form
form = nlapiCreateForm('Test Custom Suitelet Form', false);
//create sublist to show results
sublist = form.addSubList('custpage_sublist_id', 'list', 'Item List');//listー>staticlist
//form buttons
form.addSubmitButton('Submit');
form.addResetButton('Reset');
// run existing saved search
var searchResults = nlapiSearchRecord('transaction','customsearchID');
var columns = searchResults[0].getAllColumns();
// Add the search column names to the sublist field
for ( var i=0; i< columns.length; i++ )
{
sublist.addField(columns[i].getName() ,'text', columns[i].getLabel() );
nlapiLogExecution('DEBUG', 'Column Label',columns[i].getLabel());
}
//additional sublist fields
sublist.addMarkAllButtons();
sublist.addField('custfield_selected', 'checkbox', 'Selected');
sublist.setLineItemValues(searchResults)
response.writePage(form);
}
}
上記サブリストの赤字のところのようにサブリストをlist
にしたら、sort機能ができます、
しかし、改ページ機能が自分で作成する必要がある。
もし、listをstatislistに変更したら、25件以上なら、自動的に改ページ機能が右上に出てきます。
サブリストのヘッダー行の幅は調整できません。
ちょっと眠いから、あった問題と解決方法を一緒に書きました。
それでは管理人 けん でした。
おやすみー
それぞれの値をセットしたら上で完璧ではないよー
まだ色々問題が出てくるはず、それは何かというと
今回、例で説明します。
この記事の目次
● サブリスト例
● あった問題
● 解決方法
サブリスト例
function UpdateSalesOrder(request, response) {
var form,sublist;
//GET
if (request.getMethod() == 'GET')
{
//create form
form = nlapiCreateForm('Test Custom Suitelet Form', false);
//create sublist to show results
sublist = form.addSubList('custpage_sublist_id', 'list', 'Item List');//listー>staticlist
//form buttons
form.addSubmitButton('Submit');
form.addResetButton('Reset');
// run existing saved search
var searchResults = nlapiSearchRecord('transaction','customsearchID');
var columns = searchResults[0].getAllColumns();
// Add the search column names to the sublist field
for ( var i=0; i< columns.length; i++ )
{
sublist.addField(columns[i].getName() ,'text', columns[i].getLabel() );
nlapiLogExecution('DEBUG', 'Column Label',columns[i].getLabel());
}
//additional sublist fields
sublist.addMarkAllButtons();
sublist.addField('custfield_selected', 'checkbox', 'Selected');
sublist.setLineItemValues(searchResults)
response.writePage(form);
}
}
あった問題
上記サブリストの赤字のところのようにサブリストをlist
にしたら、sort機能ができます、
しかし、改ページ機能が自分で作成する必要がある。
もし、listをstatislistに変更したら、25件以上なら、自動的に改ページ機能が右上に出てきます。
サブリストのヘッダー行の幅は調整できません。
ちょっと眠いから、あった問題と解決方法を一緒に書きました。
それでは管理人 けん でした。
おやすみー
2016年11月21日
ネットスーイトの【与信限度の合計を超えて適用することはできません。】エラー
概要(OverView)
久しぶり、記事書く感じですが、最近仕事でわかった
ネットスーイトの標準機能についてシェアしようと思います。
ネットスーイトの技術は日本では、まだそこまで流行っていないので、
いろいろ標準機能もヘルプや直接問い合わせするしかない。
その中に請求書(Invoice)とクレジットメモ(credit meo)のわかった部分を説明します。
応援もよろしく頼みます。
この記事の目次(Contents)
● 請求書
● クレジットメモ
● あった問題?
● 本日のいい放題
請求書
ガス代や電気代などよくコンビニで払う時に使う支払いに使う書類、って感じが請求書
ネットスーイトではトランザクションがあり、
トランザクションには、種類が請求書、発注書、クレジットメモなどを選択できる。
トランザクションが標準オブジェクトの感覚です。
自分のサービスを使ってるお客に請求書を発行し、料金を払ってもらう時に使う機能です。
クレジットメモ
クレジットメモもトランザクションの1種類であり、請求書の子オブジェクトイメージです。
まだ短いので、理解は100%が正しいとは言えないです、間違えたら、ご指摘をよろしく頼みます。
あった問題
請求書とクレジットメモはそれぞれアイテムがあり、アイテムはそれぞれの子供の感覚です。
請求書のアイテムの金額の合計 > クレジットメモの金額合計の場合に
【与信限度の合計を超えて適用することはできません。】
標準エラーになります。
本日のいい放題
今日は請求書とクレジットメモについて自分なりの理解を説明しましたが、完璧ではない理解なので、
間違えたら、ぜひ指摘、コメントをよろしく頼みます。お互いに勉強し合って成長します。
【完全無料プログラミング研修&就活塾】
それでは 管理人 けん でした。
2016年11月09日
ネットスーイトのNumber()
今日の記事が簡単です。だから、短くて目次がな〜い^^
最近、やったことはネットスーイトで金額をパラメーターに設定し、連携システムに
渡すことです。
連携システムが欲しいデータは整数型のデータです。
それで、ネットスーイトの環境で金額をNumber(金額)にして、デバッグで確認し
整数になったので、連携システムに渡しましたが小数点ついてしまった、エラーになって
それでわかったことはNumber(金額)にしたら、結果が小数点はつくの。
Number()のバグかNumber()の帰り値が整数ではないか
整数が欲しい時に気をつけましょう。
2016年11月08日
トランザクション単位の保存検索
ネットスイートのトランザクションがあり、
保存検索でトランザクション単位にリストを出す場合、2種類遊べる。
それは何かというと
トランザクションを検索する際にメインラインをtrueかfalseかの話です。
ネットスイートのトランザクションがsfdcの標準オブジェクトのようなものです。
それぞれのトランザクションがアイテムというトランザクションを持っています。アイテムもsfdcの
標準オブジェクトのようなものです。
ただし、トランザクションがアイテムとの関係が親子のような感じです。
保存検索で絞ったリスト一覧、を親単位表示する場合、保存検索の条件のメインラインをtrueにする。
子単位表示したい場合、保存検索の条件のメインラインをfalseにすればいい。
今日は超簡単のシェアっす。
仕事の休みで中国の西安に行ってみてくださいね。なかなか休暇のいいところっす。
保存検索でトランザクション単位にリストを出す場合、2種類遊べる。
それは何かというと
トランザクションを検索する際にメインラインをtrueかfalseかの話です。
ネットスイートのトランザクションがsfdcの標準オブジェクトのようなものです。
それぞれのトランザクションがアイテムというトランザクションを持っています。アイテムもsfdcの
標準オブジェクトのようなものです。
ただし、トランザクションがアイテムとの関係が親子のような感じです。
保存検索で絞ったリスト一覧、を親単位表示する場合、保存検索の条件のメインラインをtrueにする。
子単位表示したい場合、保存検索の条件のメインラインをfalseにすればいい。
今日は超簡単のシェアっす。
仕事の休みで中国の西安に行ってみてくださいね。なかなか休暇のいいところっす。
2016年10月23日
副業 アフィリエイト ハッピーメールで稼ぐ
本記事の文字が少し多くように見えるが、実際作業時間は10mins以内です。
ハッピーメールのアフィリエイトってよく詐欺というブログもあるですが、
実際にしてみたら、稼いだ。確認は約一週間でした。
下記は写メです。H Mと書いてあるところがハッピーメールの振込です。
出会い系のアフィリエイトの報酬が高い、振り込みも早い魅力的ですよね!
それでは早速ハッピーメールのアフィリエイトの始め方を紹介させていただきます。
1:上記のリンクをクリックし下記の画像のように性別を選択する。
2:次は簡単なプロフィール情報を入力する。
注意ですが、赤い星がついている「地域」「都道府県」「年齢」「ニックネーム」は、必須ですので必ず書き込むようにしましょう。
後に、アフィリエイト報酬をもらうので、できれば正確に書くべきです。
3:電話番号と4桁暗証番号を入力する。(ログインの時に電話番号と4桁暗証番号を使う)
※イタズラ電話などは一切ありませんし、ハッピーメールのサイト上で公開されることはありませんのでご安心ください。
4:電話番号の確認
最後に、電話番号認証をしてハッピーメールの登録作業は終了です。
電話番号認証は、3秒ぐらいで終わりです。
ここまで電話番号と暗証番号でログイン出来ます。しかし、
5:年齢確認
振込年齢認証だけは最低限しといたほうが良いです。
アフィリエイト報酬の振り込みなども、年齢認証をしているかしていないかで変わってくるかもしれません。
未成年でないことや、信用も大事になってきます。
この年齢認証も3分もあれば終わるのでやっておくべきでしょう。
6:アフィリエイトコードの取得
ここから、大事なところ、ハッピーメールのアフィリエイトコード取得です。
まずはハッピーメールの管理画面(トップページ)を開きます。
上の画像のように最初はニックネームの下に、アフィリエイトリンクがあり、ここをクリックします。
7:次の画面に進むと、利用規約リンクが出てきますのでそれをクリックします。
8:利用規約をしっかり読んで「取得する」というテキストリンクをクリックです。
最後に「はい」をクリックします。
登録完了しました」が出るはずなので、これでハッピーメールのアフィリエイト登録はできました。
9:最後に「アフィリエイトトップ」をクリックしてください。
アフィリエイトトップページを開いたら、少し下にスクロールして、ハッピーメールのあなた専用コードが表示されているはずです。
このリンクから無料登録してもらうと、あなたの報酬になるですよー。
ここから自分の専用URLを広げて登録してもらえばいいですよー。
書く内容が多かったけど、実際作業時間は10分以内です。
ハッピーメールのアフィリエイトってよく詐欺というブログもあるですが、
実際にしてみたら、稼いだ。確認は約一週間でした。
下記は写メです。H Mと書いてあるところがハッピーメールの振込です。
出会い系のアフィリエイトの報酬が高い、振り込みも早い魅力的ですよね!
それでは早速ハッピーメールのアフィリエイトの始め方を紹介させていただきます。
- ハッピーメールに無料登録
1:上記のリンクをクリックし下記の画像のように性別を選択する。
2:次は簡単なプロフィール情報を入力する。
注意ですが、赤い星がついている「地域」「都道府県」「年齢」「ニックネーム」は、必須ですので必ず書き込むようにしましょう。
後に、アフィリエイト報酬をもらうので、できれば正確に書くべきです。
3:電話番号と4桁暗証番号を入力する。(ログインの時に電話番号と4桁暗証番号を使う)
※イタズラ電話などは一切ありませんし、ハッピーメールのサイト上で公開されることはありませんのでご安心ください。
4:電話番号の確認
最後に、電話番号認証をしてハッピーメールの登録作業は終了です。
電話番号認証は、3秒ぐらいで終わりです。
ここまで電話番号と暗証番号でログイン出来ます。しかし、
5:年齢確認
振込年齢認証だけは最低限しといたほうが良いです。
アフィリエイト報酬の振り込みなども、年齢認証をしているかしていないかで変わってくるかもしれません。
未成年でないことや、信用も大事になってきます。
この年齢認証も3分もあれば終わるのでやっておくべきでしょう。
6:アフィリエイトコードの取得
ここから、大事なところ、ハッピーメールのアフィリエイトコード取得です。
まずはハッピーメールの管理画面(トップページ)を開きます。
上の画像のように最初はニックネームの下に、アフィリエイトリンクがあり、ここをクリックします。
7:次の画面に進むと、利用規約リンクが出てきますのでそれをクリックします。
8:利用規約をしっかり読んで「取得する」というテキストリンクをクリックです。
最後に「はい」をクリックします。
登録完了しました」が出るはずなので、これでハッピーメールのアフィリエイト登録はできました。
9:最後に「アフィリエイトトップ」をクリックしてください。
アフィリエイトトップページを開いたら、少し下にスクロールして、ハッピーメールのあなた専用コードが表示されているはずです。
このリンクから無料登録してもらうと、あなたの報酬になるですよー。
ここから自分の専用URLを広げて登録してもらえばいいですよー。
書く内容が多かったけど、実際作業時間は10分以内です。
フォームにカスタムのフィールド|タブの追加方法
今回出したソースの例の中にタブ|フィールド|サブタブの追加例は全部記載している。
注意点はタブであろうがフィールドであろうが、サブタブであろうが
どっちも引数1はcustpage_がないとエラーになる。
custpage_プラス任意の意味のある英文字でいいと思う。カスタマイズものなら、custpage_が必須だから。
//Define the user event beforeLoad function
function tabsToSalesOrder(type, form)
{
//Define the values of the beforeLoad type argument
if (type == 'edit' || type == 'view')
{
//タブ例、フォームに追加
var sampleTab = form.addTab('custpage_sample_tab', 'Sample Tab');
//フィールド例、フォームに追加
var newFieldEmail = form.addField('custpage_field_email', 'email', 'Alt Email', null,
'custpage_sample_tab');
//Add a second field to the new tab
var newFieldText = form.addField('custpage_field_text', 'textarea', 'Details', null,
'custpage_sample_tab');
//サブタブ例、タブに追加
var sampleSubTab = form.addSubTab('custpage_sample_subtab', 'Sample Subtab',
'custpage_sample_tab');
//Add a select field to the subtab
var newSubField = form.addField('custpage_sample_field', 'select', 'My Customers', 'customer',
'custpage_sample_subtab');
//Add a second subtab to the first tab
var sampleSubTab = form.addSubTab('custpage_sample_subtab2', 'Second Sample Subtab',
'custpage_sample_tab');
//Add a field to the second subtab
var newSubField = form.addField('custpage_sample_field2', 'select', 'My Employees', 'employee',
'custpage_sample_subtab2');
}
}