皆すでに知っているのかもしれないなと思いながら書いています。 3日ぐらい試行錯誤してしまいました。 結果としては成功したので備忘録も踏まえて書いておきます。
結論
- SafariでPDFをダウンロードする
- 「共有」機能からKindleを選択する
だけの話です。
なぜここまで困ってしまったのかの失敗談を書いておきます🥺
続きを読む皆すでに知っているのかもしれないなと思いながら書いています。 3日ぐらい試行錯誤してしまいました。 結果としては成功したので備忘録も踏まえて書いておきます。
だけの話です。
なぜここまで困ってしまったのかの失敗談を書いておきます🥺
続きを読む皆さんはSalesforceで今日も長くて難解で楽しい数式書いてますか?私は今日も元気に楽しく数式を書いています。
もし同じ事をしようとしている人がいたら(いない事を祈る)簡単に出来るといいなと思ったので書きます。
という場面の解決法です。
これから 『終了時間』という項目を足したいこんなオブジェクトがあるとします。
StartDatetime__c
RequireMinutes__c
StartDatetime__c
に RequireMinutes__c
を分数として追加したい!
画像の入力例だと、 2020/03/27 11:00
に30分を加算して 2020/03/27 11:30
にしたいのです。
DATETIMEVALUE( TEXT(YEAR(DATEVALUE( StartDatetime__c ))) & "-" & LPAD(TEXT(MONTH(DATEVALUE( StartDatetime__c ))), 2, "0") & "-" & LPAD(TEXT(DAY(DATEVALUE( StartDatetime__c ))), 2, "0") & " " & LPAD(TEXT(HOUR( TIMEVALUE( StartDatetime__c ) + (VALUE(TEXT( RequireMinutes__c )) * 60 * 1000) )), 2, "0") & ":" & LPAD(TEXT(MINUTE( TIMEVALUE( StartDatetime__c ) + (VALUE(TEXT( RequireMinutes__c )) * 60 * 1000) )), 2, "0") & ":00" )
が、私の実力ではこうなってしまいました。
簡単に解説だけしておきます。
今回のキモはこれですね。
Datetime型のままで計算すると日付が加算されてしまいます。 StartDatetime__c + 1
にすると 2020/03/28 11:00
になってしまいます。
そのため今回のようにDatetimeから年、月、日、時、分を取得して計算した上で戻す事をしています。
それでは数式でやっている事を1つ1つ分解してみていきましょう。
TIMEVALUE( StartDatetime__c )
必要時間は選択リストなので文字列→数値にする
VALUE(TEXT( RequireMinutes__c ))
Time型に追加するのでミリ秒にする
時間値の加算または減算の単位はミリ秒です。 @時間カスタム項目 - Salesforce Help
VALUE(TEXT( RequireMinutes__c )) * 60 * 1000
足す
TIMEVALUE( StartDatetime__c ) + (VALUE(TEXT( RequireMinutes__c )) * 60 * 1000)
これは簡単ですね最終的に
DATETIMEVALUE("2020-03-27 11:30")
という形式になっていればOKです
DATETIMEVALUE("2005-11-15 17:00:00") は、日時値として November 15, 2005 5:00 PM GMT を表示します。 @数式の演算子と関数 A – H - Salesforce Help
ということで文字列を作る
TEXT(YEAR(DATEVALUE( StartDatetime__c ))) & "-" & LPAD(TEXT(MONTH(DATEVALUE( StartDatetime__c ))), 2, "0") & "-" & LPAD(TEXT(DAY(DATEVALUE( StartDatetime__c ))), 2, "0") & " " & LPAD(TEXT(HOUR( TIMEVALUE( StartDatetime__c ) + (VALUE(TEXT( RequireMinutes__c )) * 60 * 1000) )), 2, "0") & ":" & LPAD(TEXT(MINUTE( TIMEVALUE( StartDatetime__c ) + (VALUE(TEXT( RequireMinutes__c )) * 60 * 1000) )), 2, "0") & ":00"
LPADは 3
とかを 03
にする関数です。 DATETIMEVALUE
は 2020-3-5 11:30
のように0で埋まってないと表示されないのでLPADを使います。
はじめに書いた結論の通りになりました。
もっと簡単なやり方知ってるぞって方は是非教えてください・・・
この辺のヘルプを参考にしました
タイトルで言い切ったやつなんですけど、詳細を書いていきます。
Salesforce上の Lightning Web Components(以下LWC)で、FullCalendar を使ったものを作ろうとしていて詰まった&あんまりドキュメント見つけられなかったのでやったことを忘れないようにまとめておきます。
現状の結論としては、LWCの this.template.querySelector は Element じゃないっぽいのでpollyfillでこんな感じに書いていると Illegal invocation
が出るぽい
const matchesMethod = Element.prototype.matches || (Element.prototype as any).matchesSelector || (Element.prototype as any).msMatchesSelector const closestMethod = Element.prototype.closest || function (selector) { // polyfill let el = this if (!document.documentElement.contains(el)) { return null } do { if (elementMatches(el, selector)) { return el } el = el.parentElement || el.parentNode } while (el !== null && el.nodeType === 1) return null }
細かく検証出来ていないのですが、LWC側でこういった感じでFullCalendarを使おうと思った時に私の環境では発生しました
let calendarEl = this.template.querySelector('[data-id="ScheduleAdjustmentCalendar"]'); new FullCalendar.Calendar(calendarEl, { plugins: ['dayGrid'] }).render();
私の場合は元ライブラリをforkしてブランチを切ってそこから静的リソースに持ってくるようにしてしまいました。 compareこんな感じです
if (typeof el.matches === 'function') { return el.matches(selector) }
みたいに回避しちゃいました。もっといい解決策ありそうだけど。。。誰か教えて!
Illegal invocation
が出る時って「不正な呼び出し」なので違うクラスの同じメソッドをcallで呼ぼうとした時とかに出るぽいので、
今回の場合 Element.prototype.closest
とか Element
クラスのメソッドだと思って呼んでいるけど、呼んだクラスが Element
じゃない時に発生するんじゃないかなと。
事象の項にも書きましたが、おそらくですが、普通にWebサイト作ってJS呼んだときの document.querySelector
は Element
とか HTMLElement
が返ってくるけど、LWCの this.template.querySelector
はLWC独自のなにかしらのProxy的なクラスが返ってくる(HTMLElementと同等のAPIを持っているか移譲しているかはわからない)から、今回のような pollyfillで書いたコードでエラーが発生してしまうのではないかなと思っております。(これ参考文献探したけど見つけられなかったので、あくまでも推測です。)
とはいえ直接呼べるなら呼んじゃえばいいじゃん。と思って typeof el.closest
が function
だったらそれをそのまま呼んじゃえって書いてます。
いくつもの環境で試すとかはまだ出来ていないのですが今回はSalesforce上のLightningWebComponent上に限った話なのでこのまま行こうかなって気持ちです。
この記事は GYOMUハック/業務ハック Advent Calendar 2019 - Adventar の22日目の記事です。先日の記事が話題になったりなど、とても盛り上がっていてそのAdvent CalendarでBLOGを書けるのはとても嬉しいです!
皆様はじめまして @noblejasper と申します。私のかんたんな経歴としては
を経て、今年の7月ぐらいから採用業務の効率化や最適化のために採用向けのGYOMUハックをやらさせていただいております。
シンプルに言うと、SalesforceでATS(Applicant Tracking System : 採用管理システム)のアプリ開発を行っています
今回このBLOGでは開発しているアプリケーションの詳細は説明しませんが、Salesforceに触れたのは2019年の7月からなのでまだ半年も経過していないペーペーのSalesforceエンジニアです。
自社で自社の社内向けシステムを作る場面て思っている以上にたくさんあると思うんですよ。
例えば何かのデータを集めたり、集計したり、分析したりするために
とか簡単なものから大変なものまでありますが、どれも社内向けシステムと言えるのではないでしょうか?
私は今Salesforceで大きめの社内向けシステムを開発しています。
まだまだ活用しきるところまではできていませんが、基本的な機能やデータ構造はできていて現場で使い始めるところまで開発できたので、 開発をして感じたwebアプリケーションエンジニアがSalesforceエンジニアになるメリットみたいなものをまとめていけたらいいなと思って書いています。
結論から言うと、社内向けシステムを作るのであれば絶対にSalesforceで開発するほうがいいです。 細かい理由は後述のメリットなどで書こうと思いますが、
他にもたくさんありそうですが、私が思う大きい理由はこんなところです。
前置きが長くなりましたが、ここからが本題です!
Webエンジニアと言っても最近ではポジションも細分化され、いろいろなスキルセットがある思っています。 私の独断と偏見でWebエンジニアのポジションごとにSalesforce開発でメリットになるであろう部分をまとめてみようと思います。
私が今まで経験してきた
の軸で書いていきます!
続きを読む我が家にはiMac (27-inch, Late 2013)があるんですが、特に買い替えが必要だとは思っていなくて、全然現役です。
しかしMacBookProのサブディスプレイとして使いたい場面があり、繋げたいなーと思っていました。そんな時に便利なのがターゲットディスプレイモード!
使い方や切替方法などは今回説明しません。Apple公式のヘルプのほうが詳しいので読んでみてください。
あのMiniDisplayPortみたいな穴(正しくはThunderbolt2という穴)とMacbookProのUSB-Cがつながればええんじゃろ?って思ってあまり考えずにAmazonでケーブルを探してポチッと。
少なくとも我が家のiMacさんはこのケーブルではうんともすんとも言いませんでした。
これじゃダメらしい。
MiniDisplayPortではなくThunderbolt2という形式のケーブルが必要と公式ヘルプには書いてある。
穴の形一緒じゃね???一緒のものではないの???
Thunderbolt および Thunderbolt 2 は、Mini DisplayPort とは別物です (形状は同じですが、ケーブルやポートに付いている記号が違います)。ただし、このポートは Mini DisplayPort でのビデオ出力には対応しているので、Mini DisplayPort ケーブルを使って Mini DisplayPort ディスプレイを接続することができます。
別物です!
これです。これなら繋がりました。
Apple Apple Thunderboltケーブル (0.5 m)
そしてMacbookPro側に最近だとThunderbolt2のポートは存在しないので、 Thunderbolt2をType-cに変換するのはこちらです。
Apple Thunderbolt 3(USB-C)- Thunderbolt 2アダプタ
純正を使ってください。 これで繋げてダメだったらAppleのサポートに問い合わせられます!(強い)
これは調べてみたら設定と操作で回避する解決策がありました。
のやりとりの一番下の回答の方法でやったら正常に画面がつきました!
- Macbook Proのホットコーナー機能で、Macbook ProのディスプレイをOffにできるようにします。
- ともにログイン済みのMacbook ProとiMacをケーブルで接続します。
- Macbook Proのディスプレイを、ホットコーナー機能でOffにします。
- iMacでCommand+F2を押し、ターゲットディスプレイをオンにします。
- Macbook ProのディスプレイをOnにします。
- iMacのバックライトが点灯し、正しく動作させることが出来ます。
今回間違ってケーブルを買ってしまった事から意地でターゲットディスプレイモードをやってやろう!と検証してみましたが、費用がかかりすぎます。
ケーブル2本で10000円ぐらいしました。
場所とお金に余裕があるならもう少しお金を出してモニターを買う方が簡単です。⌘+F2 とか押さなくていいし、ディスプレイをいちいちスリープさせる事も必要ないです。
Acerとかなら16200円とかじゃん
Acer モニター ディスプレイ KA270HAbmidx 27インチ フレームレス VA HDMI端子対応 スピーカー内蔵 ブルーライト軽減
iMacをサブディスプレイにするのは大変だけど、私としてはとても快適な作業空間になりましたとさ。
昨日書いたやつの続きです
これはホント簡単で、
だけです
次は、CSVの中身をフィルタリングする処理を書きます
そのCSVをGoogleスプレッドシートにコピペしてる人いませんか?
それGoogle Apps Scriptで自動でできるよ!
ということで
もともとプログラマだけど、敬遠していたGoogle Apps Script。
ついにはじめてみました。毎日CSVをコピペする未来を迎えないために。
{}
の中はよしなに書き換えてください
何やってるかはコメントを見ればわかる気がしますが、わかりづらい場合にはコメントくださいませー
ここまででとりあえず
が出来たと。この後はスプレッドシートにぶっこむやつですね。
続きは今度書く。