Best Of
Re: j'ai un autre compte professionnel qui est bloqué
Bonjour @Rahal Mouhib,
J'ai remarqué que vous avez un ticket ouvert avec notre équipe d'assistance. Si vous avez besoin de plus d'aide, veuillez continuer à travailler avec l'équipe afin qu'elle puisse communiquer avec vous via des canaux privés concernant les informations liées à votre compte. Cependant, en attendant, je vous recommande de suivre les étapes de cet article d'aide : Dépannage : TOTP par e-mail.
Merci,
Georgie
Re: Recover from a Snapshot vs Deleted Items - What's better?
Hey @Kathy PPT
Just chiming in here to help clarify! It looks like there were two separate Questions (discussions) posted, but with similar content, so our Moderation team merged them into one post (this post) so that members in the Community could see your full context.
Are you missing other Community discussions or comments? Did you receive an error message when trying to post?
Bridge examples including Javascript
Hi fellow Smartsheeters! In preparation for my session at Engage 2024, The future of workflows, I'm posting a variety of live Bridge examples to this thread. Each "block" will have a use case description, workflow layout, and (if needed) the javascript code I used.
Enjoy!
Preserving Human-Driven Modifications in Smartsheet
Hi Community.
Reflecting on the solution to kbloch's question regarding unwanted automation changes in Smartsheet, I devised a method to track human-driven modifications. I want to share this approach with the community, hoping it can enhance how we manage and restore data integrity.
Step-by-Step Process to Preserve Modification Records
Creating a backup and history of changes in Smartsheet, particularly for the "Modified" and "Modified By" columns, is crucial for maintaining accurate records, especially when dealing with unintended modifications due to automation. Here’s a breakdown of how to implement a strategy to preserve these details:
Modified, Modified By Report
Copy Rows Workflow Automation
- Create a Workflow with Trigger Conditions:
- Objective: Trigger a workflow when any row is modified.
- Trigger Conditions: Set up the workflow to trigger on changes in any cell within a row. Add a condition to ensure it does not trigger if the modification is made by the automation account (e.g., automation@smartsheet.com), thus capturing only human-driven changes.
- Copy Rows to a Backup or Record Sheet:
- Objective: When a row meets the trigger condition, copy it to another sheet dedicated to tracking changes.
- Details: This preserves the row's state at the time of modification. Ensure the row ID or any unique ID is maintained for easy reference.
Use System and Helper Columns
Original Sheet
- Modified By Text(Original Sheet): A helper column in the original sheet can be used with a formula like
=[Modified By]@row
to capture the user who made the change. This value is then copied to the backup sheet, maintaining the integrity of the "Modified By" data. - Created Column (Record Sheet): Automatically captures the date and time when the row was copied to the backup sheet.
Record Sheet
- Highlight the Latest Changes: (Optional)
- Latest Column: In the backup sheet, implement a formula to identify the most recent change for each row. For example,
=IF(Created@row = MAX(COLLECT(Created:Created, [Row ID]:[Row ID], [Row ID]@row)), 1)
. This formula checks if the "Created" date of the row is the most recent among all entries with the same Row ID.
- Latest Column: In the backup sheet, implement a formula to identify the most recent change for each row. For example,
Modified, Modified By Report
- Create a Report:(Top Image)
- Objective: Use both the original and backup sheets to compile a report.
- Report Configuration: Group data by Row ID and include relevant columns from both sheets—particularly the "Modified By Text" and "Created" columns from the backup sheet and any applicable data from the original sheet.
Advantages of This Method
- Accuracy: Ensures that human modifications are recorded precisely, without interference from automated processes.
- Recovery: Facilitates easy recovery of previous data states if an unintended modification occurs.
- Audit Trail: Provides a clear historical record for audit purposes, which can be critical for tracking changes in sensitive or critical data environments.
By implementing these steps, you can ensure that your Smartsheet data remains accurate and that all changes are traced back to their origins, providing transparency and accountability in data management.
Limitation
Even if you change the Record Sheet's Created system column name, the report shows it as "Created", so you need to interpret the Created as the Modified (Date) of the Original Sheet.
Ready Status Solved - I hope this helps everyone
I've seen a lot of posts with people trying to figure out how to parse out predecessors so that they can set the status of the next task to "Ready" or something similar. I came up with a solution that worked for me, I figured I'd share it. This solution takes care of the various dependency types and lead/lags.
1) Create an Auto Numbering column ("ID")
2) Create a Column to get row numbers ("Index"): MATCH(ID@row, ID:ID, 0)
3) Create a row number column for each non-FS predecessor type you plan to use:
a) FF Index = Index + "FF"
b) SS Index = Index + "SS"
4) Create a multi-select Helper column ("Dependency Helper"): SUBSTITUTE(SUBSTITUTE(Predecessors@row, "FS", ", "), ",", CHAR(10))
5) Create multi-select columns for each dependency type you plan to use:
a) FS Dependencies: JOIN(COLLECT(Index:Index, Index:Index, HAS(Dependencies@row, @cell)), CHAR(10))
b) FF Dependencies: JOIN(COLLECT([FF Index]:[FF Index], [FF Index]:[FF Index], HAS(Dependencies@row, @cell)), CHAR(10))
c) SS Dependencies: JOIN(COLLECT([SS Index]:[SS Index], [SS Index]:[SS Index], HAS(Dependencies@row, @cell)), CHAR(10))
You will now have all of your dependencies separated by type and all lags removed. You can use this to build out status logic however you'd like. Below is an example for setting a Task to "Ready" if all FS Predecessors are 100% complete and all SS Predecessors are greater than 0% complete:
=IF(COUNTM([SS Dependencies]@row, [FS Dependencies]@row) = COUNTIFS(Index:Index, FIND(@cell, [FS Dependencies]@row) > 0, [% Complete]:[% Complete], =1) + COUNTIFS(Index:Index, FIND(@cell, [SS Dependencies]@row) > 0, [% Complete]:[% Complete], >0), "Ready", "Queued")
Cheers!
Vince K.
vince@nnaviaconsulting.com
https://www.linkedin.com/in/vineshkapadia
Community で人気のコメント(4) Smartsheetで最後にセルを変更したユーザーを可視化する数式
Smartsheet Community (英語版)で人気のコメントのうち、「いいね!」と思ったものをご紹介します。
第4回目は、私の友人、ベトナムのジアティンさん(@Gia Thinh )がグローバルディスカッションのスペイン語版でマルコさん(@Marco B )が質問した、「Smartsheetで最後にセルを変更したユーザーを可視化する数式」について、2つの方法を提案した、という色々な面で面白いやり取りです。
はじめに
Smartsheet では編集履歴が、システム列(Created By, Modfied By)、セルの履歴、アクティビティーログに記録されており、監査に適したツールといえます。(Smartsheetを内部監査への利用を開設した記事)
今回ご紹介するのは、最後にセルを変更したユーザを可視化する方法で、具体的には、変更者 Modified By が、その後、自動化などで変更されてしまうのに、どのように対応するかという内容です。詳しい内容は最後尾の翻訳を見ていただくとして、紹介されたワークフローの自動化を用いた2つの方法を要約しておきましょう。
1 行のコピーによりログ用のシートを作る方法
2 変更者を記録する方法
1は変更者 Modified Byがその後の操作で変更されてしまう前に、行ごとログシートにコピーし、変更を防ぐという方法です。この方法は、私もクライアントに対する作業時間記録報告などに用いています。
2は特定の承認者が決まっている場合に、誰が承認したかを簡単に記録する方法です。変更者の変化をトリガーとして、特定の承認者かをチェックし、そうである場合、割り当て先にその者を記録する、というものです。特定の承認者、という条件がない場合には、変更者が自動化の場合も記録してしまうので、特定の承認者が決まっている場合に有効な解決方法です。1がコピー先のログシートが一杯になってしまいオーバーフローするという問題も解決しています。
監査における最終変更者表示の重要性
監査において、誰がいつどのデータを変更したかという情報は、データの正確性や整合性を検証する上で非常に重要な要素となります。特に、重要な意思決定に影響を与えるデータについては、その変更履歴を詳細に追跡することが求められます。
2つの回答の比較
今回の質問に対する2つの回答は、それぞれ異なるアプローチで最終変更者を追跡する方法を提示しています。
- 回答1:行コピーによるログシートによる追跡
- 長所:
- シンプルな方法で変更履歴を記録できる。
- 柔軟性が高く、様々な種類の変更を追跡できる。
- 短所:
- オーバフロー対応などログシートの管理が必要となり、データ量が増えると処理が遅くなる可能性がある。
- 長所:
- 回答2:ユーザー割り当てワークフローによる自動化
- 長所:
- 特定の列の変更履歴を自動的に記録できる。
- シンプルな設定で実装できる。
- 短所:
- 変更者が特定される場合しか使うことができない。
- 適用範囲が特定の列に限定される。
- 長所:
監査に役立つ点
どちらの回答も、最終変更者を特定できるという点で監査に役立ちます。しかし、監査の目的やデータの性質によって、より適した方法が異なります。
- ログシートは、詳細な変更履歴を記録したい場合や、様々な種類の変更を追跡したい場合に適しています。
- ユーザ割り当てワークフローは、承認者などの特定の列の変更履歴を自動的に記録したい場合や、シンプルな設定で運用したい場合に適しています。
まとめ
監査において最終変更者を特定することは、データの信頼性を確保するために不可欠です。Smartsheetその可視化を行うには、ログシートやワークフローなど、様々な方法で最終変更者を追跡することができます。どの方法を選択するかは、監査の目的やデータの性質、システム環境などを考慮して決定する必要があります。
翻訳Smartsheetで最後にセルを変更したユーザーを可視化する数式はありますか?マルコ・B ✭
こんにちは、コミュニティ、
Smartsheet で、"X" セルの "X" 列を最後に変更したユーザーを列に表示できる数式があるかどうか知りたいです。
Smartsheetには、"Last modified user "というカラムを追加することで、最後のユーザーを確認できる機能があることは知っています。また、特定のセルを右クリックすることで、そのセルの履歴を確認することもできますが、これは非常に手動です。
以下の数式を使ってみましたが、うまくいきませんでした。監査に関連する問題のためにこの情報が必要です。よろしくお願いします。
- 数式: =IF([特定の列]@row = MODIFIED(), USER(), "")
ベストアンサー
- ジアティン ✭✭✭✭✭✭
- 07/25/24 答え✓
- @マルコ、
特定のユーザーのみが「スーパーバイザーの最初のステータス」列を変更できる場合は、以下のスクリーンショットに示すように、「ユーザーの割り当て」ワークフローを使用して、その列を最後に変更したユーザーを記録できます。
プロセスは次のとおりです。これらのユーザーの 1 人が「最初の承認ステータス」を変更すると、「変更者」システム列にそのユーザーの電子メールが自動的に記録されます。その後、ワークフローを使用して、「最終承認者」列にそのユーザーの名前を記録できます。
それがあなたにとってうまくいくことを願っています。
Gia Thinh Technology Co., LTD - Smartsheet ソリューション パートナー。
回答
- ジアティン ✭✭✭✭✭✭
- 07/24/24 2024年7月24日編集
- こんにちは、マルコ。
Google翻訳を使ってあなたの投稿を理解しようとしました。
ログ シートを使用して、特定の「テスト列」に基づいて元のシートの変更を記録する 1 つのアイデアとして、次のことが考えられます。- 元のシートにシステム変更者列を追加します
- 新しいログシートを作成する
- 元のシートに行コピー自動化ワークフローを作成し、「テスト列」に変更があるたびに元のシートからログシートに行をコピーします。
- 元のシートの各行の履歴変更を表示するには、「グループ化」プライマリ列を使用してレポートを作成します(ログシートを参照)。
デモについては以下のスクリーンショットをご覧ください。
Gia Thinh Technology Co., LTD - Smartsheet ソリューション パートナー。
マルコ・B ✭
@Gia Thinh 、
ご提案いただいた方法を試してみましたが、残念ながら期待通りには機能しませんでした。行をコピーするのではなく、移動していましたが、これは意図した結果ではありませんでした。このアプローチの背後にある理由は、ファイル内でオーバーロードが発生しないようにするためです。
要件を明確にするために、以下にスクリーンショットを添付しました。ご覧のとおり、行番号 20 では、行全体を最後に変更したユーザーが 07/24/24 の Smartsheet オートメーションであったことが示されています。ただし、実際に必要なのは、「スーパーバイザーの 1 番目のステータス」というタイトルの列のみを最後に変更したユーザーを追跡することです。「セル履歴の表示」によると、この列を 12/07/24 に変更したのはユーザー「Suly He」でした。
この要件に対応するために、「スーパーバイザーの最初のステータス」列を最後に変更したユーザーの名前を 1 つのセルに表示できるソリューションを見つけるお手伝いをいただければ幸いです。これにより、他の行に影響を与えたり、ファイルのオーバーロードを引き起こしたりすることなく、この特定の列に関連するアクティビティを追跡するのに大いに役立ちます。
この件にご注目いただきありがとうございます。皆様のご意見やご提案をお待ちしております。
回答2
(ベストアンサーと同じ)
マルコ・B ✭
@Gia Thinh 、
この解決策を共有していただき、本当にありがとうございます。私たちにとっては非常にうまくいきました。あなたのサポートに、また、時間を割いてアジャイルかつシンプルな方法でステップバイステップで反映してくれたことに、とても感謝しています。あなたは最高です! 😀
ジアティン ✭✭✭✭✭✭
うまくいったようでよかったです。
Gia Thinh Technology Co., LTD - Smartsheet ソリューション パートナー。
Help us prevent Spamming in the Community!
Hello to all our wonderful Community Members,
Some of you may have seen email notifications come through with posts this week containing obvious spam & false advertising with phone numbers and links. Our Moderation team is actively monitoring the site and doing our best to catch, and ban, any and all spammers (as this goes against our Community guidelines).
However, we need your help!
If you see any posts in the forum that contain obvious spam content, please use the flag icon to flag this as spam.
This will immediately hide the post from the public site and allow our moderators to manually review the content to determine if the post is legitimate or not.
We are so grateful for all of you, and for all that you do to make this Community a safe, engaging, and productive space to be in!
Thank you,
Genevieve
Community で人気のコメント(3) 最初の出現箇所を見つけて日付を返す数式(COLLECT関数)
Smartsheet Community (英語版)で人気のコメントのうち、「いいね!」と思ったものをご紹介します。
しばらくサボっていましたが、第3回目は、コミュニティーアンバサダー(大使)のニック・コルナ (@Nick Korna)さんがコニー・コクラン(@Connie Cochran)の質問に答えて回答した「最初の出現箇所を見つけて日付を返す数式」についての記事です。
はじめに
同一の質問に同一人物から複数の回答がある場合、最初の回答や最新の回答を参照したい場合があります。
コクランさんの場合は、同一クライアントに複数のイベントがあり、最初の出現のイベント日を参照したい、という内容の質問です。
質問と回答の要約
質問と回答の要約は以下の通りです:
質問
Connie Cochranさん (2024年2月3日) クライアント名を見てイベント日を返す数式を作成しようとしていますが、クライアント名が重複している場合は、最初の出現のイベント日だけを返すようにしたいです。しかし、解析エラーが出ます。助けてください。
回答
Nick Kornaさん (2024年2月3日)
最初の出現の日付を取得したい場合は、以下のように INDEX COLLECT を使用できます:
=INDEX(COLLECT([Event Date]:[Event Date], [Client Name]:[Client Name], [Client Name]@row), 1)
クライアントの最も早い日付を取得したい場合は、以下のように MIN COLLECT を使用できます:
=MIN(COLLECT([Event Date]:[Event Date], [Client Name]:[Client Name], [Client Name]@row))
追加の質問
Connie Cochranさん これをアーカイブシートの同じ列を見て、両方から最も早い日付を取得するようにする方法はありますか?
追加の回答
Nick Kornaさん アーカイブシートから最も早い日付を取得するためにもう一つ MIN COLLECT を使用し、両方の MIN COLLECT を MIN 内に入れることができます。これにより、絶対に最も早い日付を取得できます。最初に個別の列でテストし、正しい結果を確認してからすべてを1つにまとめることをお勧めします。
解説
INDEX関数は範囲( 評価対象となるセルのグループ)に対して行のインデクスまたは列のインデックスを指定して範囲の中から特定のアイテムを取得できます。
通常はMATCH関数を組み合わせて、INDEX(MATCH())の形式で使うことが一般です。
すなわち、MATCH関数で取得した範囲内の値の相対位置をINDEX関数の行のインデックスとするわけです。
したがって、質問の最初の出現のイベント日知りたい場合は、以下の式でも取得可能です。
=INDEX([Event Date]:[Event Date], MATCH(Client@row, [Client Name]:[Client Name]))
(なお、私のデモシートはSheet Summary のClientで選んだクライアントについて、評価する方式なので、Client@row はClient#となります。)
ただ、行や列のインデックスを指定する方法は、MATCHでなくてもいいので、コルナさんが示しているようにCOLLECT関数で予め自分の欲しい範囲を作っておいて、行のインデックスを1で指定する、という方法も可能となります。
=INDEX(COLLECT([Event Date]:[Event Date], [Client Name]:[Client Name], Client@row), 1)
このCOLLECTを利用すれば、範囲に対して評価する関数、例えば、MIN、MAX、COUNTなどを利用でき便利です。質問にある最も早い日付を取得する場合、日付は数値として扱えるので、MINで評価してやれば取得可能です。MATCHだと一つだけの相対位置が返されるのに対して、COLLECTは欲しい範囲の評価対象セルグループを取得できるので、そのセルグールに対する評価が可能となります。
コルナさんの式
=MIN(COLLECT([Event Date]:[Event Date], [Client Name]:[Client Name], [Client Name]@row))
再質問にあるアーカイブシートも含めて最も早い日付を取得の質問の回答を下のデモシートに作っておきました。(なお、別シートでなく、同じシートのアーカイブクライアント、アーカイブイベント日付を含めての最も早い日付を取得しています。)
=MIN(
COLLECT([Event Date]:[Event Date], [Client Name]:[Client Name], Client#),
COLLECT([Archive Event Date]:[Archive Event Date], [Archive Client Name]:[Archive Client Name], Client#)
)
なお、「両方の MIN COLLECT を MIN 内に入れる」ことも可能ですが、上の式のようにまとめてMINの評価をして、個々のCOLLECTのMINは省略しても、結果は同じです。
上の式は見やすくするために改行しています。MINは数値又は範囲を「,」で区切って評価対象とすることができます。
(下のSmartsheetのリンクをクリックして公開デモシートを開き、Sheet SummaryのClientを変更して、各式の動作を確認できます。)
まとめ
COLLECT関数は別の関数の中で使用し、ある範囲内にて、提供された条件に合致する特定の値を収集します。今回の例のようにMIN関数と組み合わせると、条件に合致するものの中から最小のものを取得できます。
よく使うのはJOIN関数、COUNT関数、INDEX関数などで、JOINの場合はCOLLECTで収集した文字を繋げる、COUNTは数を数える、INDEXは特定の位置のものを取得する、ことができます。
Re: Quote of the Day on Dashboard
Hi @Coby.C
I created this demo for fun. You need source data for the daily quote. Since I have only 20 quotes, I cycle through them using this formula:
=IF(INT(DAY(TODAY(1)) * 20 / 31) = [Row ID]@row, 1)
To display it on the dashboard, I used the metrics widget to make it look better. Here's the formula I used:
=JOIN(COLLECT({Quote}, {Quote of the Day}, 1))
Doesn't the quote in the image capture the spirit of our community?
Combine emails into a multiple-contact column / multi-contact column
Multiple-contact columns can be problematic to use in Smartsheet. Namely, they cannot be "put together" with a formula. There's many use cases where you need to build multiple contacts into a cell based on criteria/lookups, but there isn't a way to do that in native core Smartsheet.
There is, however, a couple of methods to do that using addons. In general I highly recommend looking at Advance packages for addons, they open a world of automation and customization beyond the core application.
Below are various mechanisms for managing multiple-contact data in Smartsheet.
Note that by "multiple-contact" I mean a Contact type column with the "Allow multiple contacts per cell" switch turned on in the column properties.
Final note: thank you to @Samuel Mueller for telling me about same-sheet Data Mesh, being great with Bridge, and other general awesomeness. Thanks to @Paul Newcome for being amazing on community and suggesting this post. And my other fellow Overachievers for making Smartsheet fun on the daily!
CORE APPLICATION
The bad news is that there's no way to "build" multiple contacts into a multi-contact column with a formula.
The only thing you can do is hand-type contacts, separated with comma, semicolon, or tab.
You cannot use Automations or Formulas to build a list of contacts.
SHEET SETUP
All the methods below leverage a single sheet with three columns.
- Column 1 is a text/number column. This can be any number of formulas that produce a series of emails, separated by comma or semicolon.
- For example, if you need to merge multiple columns of emails into one, you'd do something like
= JOIN ([Manager]:[VP], ";" )
resulting in "manager@somewhere.com; director@somewhere.com; vp@somewhere.com" in your cell - Alternatively, you may be pulling emails together from another sheet with a formula like
=JOIN(COLLECT({Email}, {Name}, HAS(Names@row, @cell)), ";")
- this formula looks at a second sheet that lists names and emails, and matches the names selected on the first sheet to the names on the second sheet to combine a list of emails. The {} items are cross-sheet references to columns on the second sheet. - Note that you need to combine emails, not names. Smartsheet has no way of mapping names like "Brian Richardson" or "Richardson, Brian" to an email address, and therefore will not convert a name to a contact
- For example, if you need to merge multiple columns of emails into one, you'd do something like
- Column 2 is a Contact column set to Allow multiple contacts. There's no formula in this column.
- Column 3 is an Autonumber column. If you already have one, you can use that instead of setting up a new one. Or if you have another means to setup a unique identifier for your rows, use that instead. You need a unique identifier on each row.
DATA MESH METHOD
Data Mesh to the rescue! Data Mesh is a paid addon tool for Smartsheet that is very powerful. It is definitely one of the top tools to take your Smartsheet automations to the next level.
Using Data Mesh, you can copy/sync data between two sheets, or between columns in a single sheet. Which is what we'll do here.
Key Value: Data Mesh triggers on changes, so your contacts will update almost immediately. It's also pretty easy to setup.
Key Drawback: not as flexible as Bridge, but pretty close.
- Open Data Mesh and click New Config
- For Source: find the sheet with your three columns, select it, and click next
- For Target: find the same sheet, select it, and click next
- For Mapping:
- Lookup Values: the Autonumber / Unique ID column
- Data Field 1 (Source Sheet): the Text/Number column that has your emails in it
- Data Field 1 (Target Sheet): the Multiple-Contact column
- For Options: set Overwrite Existing Data to Yes. Set Execution Frequency to Update Immediately. Other settings can remain as-is.
- Give your workflow a name and hit Next, then Add
That is all the setup you need. Now, whenever your formula creates or updates a series of email addresses, separated by semicolon/comma in the Text column, Data Mesh will fire and quickly post those emails into the Contact column as separate contacts, one for each email!
BRIDGE METHOD
You can also accomplish this using Bridge. Although somewhat complex to learn, the actual Bridge workflow for this is quite simple.
Key Value: fast and flexible - this workflow can be adjusted to do many more complex things, like looking up your contacts, manipulating the data, integrating contacts with other tools, or even running Javascript to match/map the emails to additional information.
Key Drawback: Bridge doesn't alert you if there's problems (yet), so you'll have to notice if the contacts aren't getting populated as expected.
Here's the setup:
- You will likely want to Trigger the Bridge workflow when a list of emails is changed, or something similar. You'll need to setup a quick placeholder blank workflow first, then in Triggers under Smartsheet setup a trigger for Column Values changed or maybe Row Updated, depending on your needs. Point the trigger at your new blank workflow.
- Add the Smartsheet: Get Row step to your workflow with the following settings:
- Sheet: {{runtime.sheetID}}
- Row: if you used the Row Update trigger, use {{runtime.event.id}}. If you used the Column Values trigger, use {{runtime.event.rowId}}
- Add the String Tools: Split Text step to your workflow.
- Text: {{states.startstate.smartsheet.get_row.row.cells.name of the Text column with emails.value}}
- Delimeter: ; or , (whatever you used in the column to separate your email addresses)
- Add the Smartsheet: Update Row step to your workflow
- Sheet: {{runtime.sheetID}}
- Row ID: if you used the Row Update trigger, use {{runtime.event.id}}. If you used the Column Values trigger, use {{runtime.event.rowId}}
- Cells: Key 1 = name of the Contact column in your sheet set to multiple contacts. Value #1 = {{states.startstate.stringtools.split_text}}
That's it! Now, whenever your comma/semicolon list of emails changes on the sheet, Bridge will read the list, split it back up, and post it into the multiple-contact column.
DATA SHUTTLE METHOD
If you don't have Data Mesh (get it!) or Bridge then you can also use Data Shuttle to accomplish the combination of emails into a multiple-contact column. It's a little more involved.
Key Drawback: Data Shuttle has to run on a schedule, with 15 minute intervals as the minimum. You cannot trigger Data Shuttle to run when your contacts change. And this relies on constant posting of attachments which fills up the attachments panel pretty quickly.
Key Value: it's relatively easy to use the UI for setup, and it alerts you if there's problems.
You will setup 2 workflows… the first will output the emails to a CSV attachment, the second will import that same attachment as contacts.
Workflow 1
- Open Data Shuttle and click the + sign to start a new workflow
- Select Offload workflow
- For Source: select the sheet that you setup in Pre-Setup
- For Target, select CSV or XLSX format and Attachment. Attachment should be pointed to the same sheet. (note - you can put it elsewhere, it's just cleaner to keep it all in the same sheet. if you put it elsewhere then just note that location, you'll need it for the second workflow). Check the "Add headers" checkbox.
- Skip to the Mapping screen. Select the Autonumber column and the Text column with the email addresses and hit Next
- Select Run on schedule and set to every 15 mins or whatever schedule you like
- Click Next, give the workflow a name, then Save
- Now Run the workflow that you just created. After a minute or so you should have an attachment on your sheet. You need to do this before doing Workflow 2 setup.
Workflow 2
- Click the + sign in Data Shuttle to start a new workflow
- Select Upload workflow
- For Source: select Attachment, then browse to the sheet that Workflow 1 saved to. Select Most Recent. Data Shuttle should find the attachment from running workflow 1 in step 8 above. Select "This file has column headers".
- For Target: select the same sheet
- For Options: select Merge, and check only the Update checkbox
- For Mapping: select the Autonumber column as the Unique Identifier. The mapping should already have mapped the Text column (with the emails) to itself, remove that mapping by changing to Not Mapped. Add a mapping to set the Source Text column (with the emails) to the Target Contact column.
- On the next screen select Run on Attachment
That should do it! Now, every 15 minutes, Data Shuttle will grab all the email addresses from the Text column, dump them to a CSV attachment, then import that same attachment to post the email addresses into the contact column and create the multiple-contacts.