Fast Track Efficiency: Data Imports with Workfront Fusion
Hosted in partnership with Brian Haight of Adobe Professional Services, this session covered 3 main CSV import/export scenarios: importing tasks from CSV files, creating custom form field values for dropdowns, and exporting project data to CSV files.
I had to hit start event.
Okay, let’s start over again. Welcome everyone. Good afternoon. If you just happen to stumble in today, you’re going to be talking, we’re going to be talking about data imports with Workfront Fusion.
We have a handful of folks here so we can probably just get started. Feel free to introduce yourself in the chat. Let us know who you are, what company you’re coming from, some of your fusion expertise.
And then, yeah, I think we are good to go.
I know Brian’s got a lot to cover so we’ll just get started here. So if this is your very first customer success workshop, we do record each of these sessions so keep an eye out for a follow-up email. You’ll get one later this afternoon with a link to the recording. You’ll get a copy of the slide deck if there’s any resources that were shared in the chat. You will also get that in your follow-up email. It’s going to come from the csatscale at adobe.com email address. So like I said, keep an eye out for that. You don’t have to worry about taking screenshots during today’s presentation. From an agenda standpoint, I’m not going to run through everything here on the screen here, but just know that we have Brian leading today’s session. He’s going to be running through a few different examples of importing and exporting CSVs with Workfront Fusion. And so we also made sure to leave some time at the end for Q&A. And so I did mute everyone’s microphones just for the demo portion and sort of the work along, follow along part, but you guys will have the opportunity to raise your hand, come off mute at the end when we open it up to some Q&A.
I put a few files in the reminder email. I will also drop those here in the chat right now, but these are your working files for today’s session. Let me just drop those in, working files for today.
Ideally, when you click on each of those links, you should have a file that is downloaded that you can then access. Some of them might, one of them might be a zip file that you’re going to need to drop down in your downloads and click into each, but these are going to be your working files for today’s session. If you haven’t already downloaded those, if you have any issues, please just post in the chat and we will get you taken care of. And with that, I will do some quick introductions. You’re not here to listen to me speak, although this event is hosted in partnership with the customer success org. I am joined here by Brian from professional services and Steve to help with the chat. So Brian, if you want to introduce yourself and get going, the floor is yours. All right, hey, everybody, I’m Brian Haidt. I’m a Workfront Fusion and integrations consultant, Fusion integrations automations. And I also work with Workfront. I’ve been with Adobe Workfront for eight years or so, something like that. And I work with lots of customers, do implementations, solve lots of problems. And we thought we’d start these webinars with a nice CSV intro for folks who are not super familiar with this stuff. I think it’s massively useful topic for this. We’ll get into it in a minute. My colleague here is Steve Teitelbaum, who’s insanely fun to work with and really good Workfront consultant, but he also has a lot of Fusion talent as well. And he’s learned that and actually does a lot of Fusion work himself. So I thought he’d be a perfect colleague for this one. And he’s here for some comic relief, I hope as well. So no pressure Steve.
And I think we’ll probably just jump right in here if you have anything you wanna say. Put Steve on spot.
Oh no, thank you for the intro Brian. And I think you’re gonna supply all the comic relief we need. Ah, all right, okay. So this is the current slide here. We’ll catch up. I’m gonna go outside and inside the presentation. You’ll see my desktop. What we’re gonna do here is actually, you don’t have to install these Fusion scenarios. There’s three of them in there. If you get this CSV bundle, you don’t have to import the Blueprints cause we’re gonna try to go through and actually implement some of these scenarios on this call. If you wanna play along at home, that’s kind of the idea. Nothing’s too crazy, but sometimes I do go too fast. So we’ll see if I can keep the pace okay. If you do get lost, it could be helpful to import the Fusion scenario from the Blueprint. I’ll show you how to do that in a moment if you’re not familiar with that. And so you can at least look and see what those are supposed to be doing. And so this is the first one. We’re just gonna do a simple scenario to import a CSV to create tasks in Workfront. And you can see the purpose. We’re going to create new records. And this technique can work for any type of new record. They’re usually easy where the major record types, projects, programs, tasks, issues, cause they’re a little bit easier to work with in front of the, in the Fusion interface. We’re gonna use the data from the CSV to look up required information. In this case, it’s the Java role ID we’re gonna look up. While we’re importing it, we’re actually gonna go through record by record and look up the Java role ID just to show how that works. And so this is really how we’re gonna put it together. We’re gonna do this in a moment. The first step is to edit that Excel or CSV file. And this is the one that I provided here. Let’s see if I can find it. I’ve got an example of it. It’s this one. This is the task CSV file.
This one you can see has the task name, the assignee name, the duration, and a role name. The role name is really what we’re gonna be playing for, playing with the assignee name doesn’t matter too much. We’re gonna kind of ignore this, but the role name is interesting. I picked two that are pretty common, a designer and a copywriter. You can change this CSV file if you want to open it from then download it. You can change the role name that actually exists in your work front instance. Instead of designer, it might be production designer or something, right? To a real role name if you could and just modify it. And then what you can do is save it locally by just doing a file and export, and then download as a CSV and just put it somewhere where you know where that is. Real quick, two cents on a CSV files. If you look at a CSV file like this one, in a text editor, this is what they look like. They’re very simple files that are comma separated values to show whatever system you’re using, that that’s where you’re going to separate these records. Each row has a new four records, five records, or five fields in it for the one record. So each item is a record going down, just a normal spreadsheet format. You might see quotations in here. Usually if there’s a comma in one of these things in the middle of a field like this, the Excel or whatever your program is might put a quotation text qualifier around it. So you might see those as well, just to let it know that anything within the quotes is a valid field. It’s important because if you save this as an Excel file, it’s not gonna work. It has to be a CSV file. If I do file and export or save as an Excel file, Fusion doesn’t understand what that is. It has to be a CSV file. Changing the extension from XLSX to CSV doesn’t count either. You have to actually have a CSV that’s exported. So this is what we’re gonna do. We’re gonna actually create a scenario here. I’m gonna step through it. You can kind of see here what the plan is. Save the CSV file locally, upload it to Workfront. We’re gonna get the document ID. We’re gonna get a project ID, and then we’re gonna run the FUSIO scenario after we put it together to add some tasks. So I’m gonna go ahead and jump in here and we can escape this one here and jump into Fusion. The first thing though we can do is create a project in Workfront. So if you’re playing along at home, I’m in just a normal random portfolio here. I’m gonna do projects. You don’t need to use a template. I’m just gonna use a new project. I’m just gonna call it- I think you stopped sharing your screen. Oh, I did stop sharing. Okay, good, thank you. Very helpful. That should work. So let’s do that again. I’m gonna go in my portfolio. We’re gonna new project and then create a new project here. I’m gonna call it CSV import test. Okay. And then I will use this in a moment for the documents and I’ll get the project ID. This is the project ID in the URL. You can double click on what we call the GUID, this ID in here and the double click usually selects it. You don’t have to try to piecemeal, try to do this. Just double click. It’ll grab it. You’ll control C and copy that guy. What I’m gonna do is I have a folder, a blank folder called Webinar Live. And I’m gonna start with this first scenario. And the first thing is on a new scenario, we’re gonna do a set multiple variables to hold our scenario variables, which is a nice way to set these imports up. So it’s under tools.
You can go set multiple variables. It’ll add this module and it allows you to set obviously these different variables here on the right. And we’re gonna set a couple of them in here. The first one’s gonna be the CSV document ID, which we don’t know yet. We’ll have a placeholder CSV document ID. And the second one is gonna be the project ID. So project ID and don’t have that quite yet maybe.
The project ID, let’s go get that first. Project ID is from the new project you created, double click on that project ID, copy it, and you can drop it right in here. Under, if you can edit the one you just created and pop that guy in there.
All right, hit save a couple of times, hit okay. The next thing we’re gonna do is upload our CSV file. You may have just downloaded it and we’re gonna go to documents area, you go grab it. So I have one here called task CSV. It’s in my downloads, see task CSV. Just gonna drag it in here and I’ll create this file.
Feel free to, if I’m going too fast, feel free to tell me to slow down. Steve will also remind me if I don’t notice. Once you upload the CSV file, I generally just go to document details, which is a little link in here. If you hover over it, you can see the details.
And then this one gives you also your document ID. So that’s where Fusion works with a lot of IDs. You can see how this URL works. There’s two IDs in it. The first one right after document slash is the document ID. Every document has at least one document version and that’s what the next one is. We don’t care about the document version. We just wanna get this first one right after the document and you grab the document ID and we’re gonna pop that into the scenario here.
And so I’m gonna edit this file, pop the document ID in and then we’re off and running in regard to. So I usually like to rename these as I go. You might see me do this. I’m gonna say set scenario variables.
Right, and this scenario is gonna be our 1.0 import CSV file.
And so I generally like to rename things as I go cause it saves time later and then you can go back and see what you’re doing with all these.
So the next thing we’ll do is since we have our document ID that’s all you need to download the file. So we need it, Fusion needs that CSV file to work with it. So I’m gonna go to work front and I’m just gonna do a download document record right here or module download document, that’s it. And make sure you have the right connection. You might have a sandbox connection in there also.
And then I have my document ID. Once you have here, you have it as a variable. So it shows up in purple from this first module. So you can pop your document ID right in there and then I will rename this to download CSV file.
Once again, renaming these is a nice to have but it’s nice to see that in the history so you know what’s going on. At this point, you don’t need to run it yet. It’ll grab the CSV file if you have the right document ID and then you can parse it. And we’re gonna run it right after we parse it here. So the next module after you download it is a parse CSV and parse CSV.
Okay, and so then this thing is asking for the number of columns. The number of columns is in your CSV file and wants to know that there are one, two, three, four columns in your CSV file. It’s pretty important for it to know how to handle this incoming document. So you put the four in.
And then it wants to know what down here at the bottom, all these are fine here. What is your CSV content really? And it’s the data from the download.
That’s the answer. These are pretty normal. There’s a delimiter type as other and it just puts in the comma for you. And we know our document contains headers. Headers are really, really useful in these CSV files. So you know what all the data is, right? So these are all just fine to leave these pre-checked. If you’re not keeping up with me, I promised I would show you how to import the blueprint. You can, after you extract the blueprints file from the zip file, you can just from a blank scenario, click on this three dots at the bottom and click on import blueprint and browse for your file. And then you can import the scenario one file, which is what we’re doing here. If you’re having trouble following along.
With this point, what I like to do is since our CSV file contains headers, I like to play the scenario and see what it comes back as. It may give you a little warning here that says, you should, the transformer should not be the last module. I don’t really care. I’m just gonna run it anyway. And it should download the file and it should parse the file and it should show one, one, one, just like this. Now, if you click on the one above the blue module, the CSV one here, you will actually see all your CSV data coming in. And it’s pretty basic task one, user one, duration one, task two, user one, two, designer. These are the different records coming in from the CSV file. And there should be 20 of them. There’s 20 of them.
So pause there for a second. Hopefully everybody’s keeping up. If you’re trying to do this at home, this is not too crazy in terms of CSV stuff. I’ll go ahead and save my scenario. And it says little warning anyway. I don’t care. I’m just gonna save it.
Next, we’re gonna go search for the job role ID. So if you could see in the one here, we have the job role name.
And hopefully this is at this point, a real name in your work front system. We’ll go ahead and do a search.
And I usually do a search legacy. I think either search would work for this. Search legacy is sometimes the search non-legacy wants you to use a custom form, which we’re not interested in. So I’ll just use a legacy for this one. And in this case, we are going to look up a job role. In here, it’s under job role.
And in this case, on the search, I will say I want the first matching record instead of all. First matching record, because I want to save one job role by the name. What is the name of it? So I’m gonna search by the job role name, which is in the search criteria.
So job role record type, results found, first matching record. And we’re gonna look these up as we go. The name down here in the search criteria is equal to, and then it is, and now you’ll see in my history, task name, assignee name, duration, role name, because I ran it and I ran it and the history is now available. I can see these that came in and I would go to the role name so I’m gonna look it up by the role name and see if I could find the job role ID, which is really what I need when I’m creating a task. And so this down here is saying, once you search and find it, what do you want to come back? And I want the job role ID, I’m gonna use that. You can also get the job role name and maybe some other things. But the most important thing is to get that ID.
So then I’m gonna rename this and say, get job role by name, just so I know what’s happening.
And I can see it in the scenario. If I go dig into this a year from now, I know exactly what that’s doing. It’s getting the job role by name. This point, I’m gonna save it and run it again and see if it finds my job roles. And right now you can see it’s counting up to 20.
The reason is the output of the CSV file was a bunch of bundles. And so because it’s in these bundles, it’s going one by one through the bundles after parses the CSV file. And one by one, it’s looking up the job role.
And so it’s finding them. So you could see this. This is the result of the first search designer, second search designer, search services. It keeps finding the same one. But if you go way down here, you see it looked up copywriter and found that one also. So I’ve got my job roles coming out of here. And then I knew I’d have everything I wanna add my tasks. So I have all the things I need. I have my project ID, which I set over here. I have my job role name. I have my task name.
And like I said, I’m gonna ignore the assignee. You can put real users in here and do an assignee lookup the same way if you want to. But all I need to do then to add the task is a create record. So I’m gonna do a work front. I can do create record.
We’ll do the new one, the non-legacy this time.
And the record type is going to be a task because I’m gonna create a task on the product. And it says, which fields do you want? Now I kind of run into this stuff where it sometimes it wants a custom form attached. If you, I do run into this. You don’t have to check the custom form. You can just check the fields you wanna match to map here. You can kind of ignore this if you want. Really wanna map the task name, which is required and the product ID. Those are the two main ones that are required. Task name, which is just name here and the product ID.
Task name, product ID. These are here.
So I also know my job role name. In this interface, the job role name is actually rule. It’s not the name, it’s the role ID. We looked up the job role ID and there’s the role ID. And I don’t know why it doesn’t say job role ID, it just says role ID.
But either way, that’s what we really want. And you can also put other things in here, like if you know your portfolio you want it in, or actually, sorry, that would be our project.
It’s really just, if you had the assigned to ID, you could put that in here as well. The assigned to ID is up here. If you have that, if you look that up, if you know who that is, is the assigned to ID. But we’re not gonna do that right now. We’re just gonna map these three fields, which are the name, which comes out of the CSV file, task name, the project ID, which we set up. You have to click this little map button. If you don’t click the map button, it’s gonna look up a bunch of fields here we don’t want. Project ID is coming out of your purple one. And your role ID here is, we just looked it up. Get job role by name, search legacy, this number four is the ID.
So we’ve got these three things mapped and we’re gonna create 20 tasks if it does right. I’m gonna rename this, say create task on project, and I’m just gonna hit go. So this is importing tasks from a CSV file.
And you watch it run and it should get up to 20.
This is a pretty simple import that can work for all sorts of different objects. It’s really, really useful. So then you can go back to your project, which I have my project here. It’s the same one I put my CSV file on. The breadcrumbs are always useful to get back to your project.
And I’m gonna click on tasks. And I have a bunch of tasks assigned to assignments here. The assignments are all the job roles.
Oh, we forgot to map the duration. Could have done that too. The duration could have gone in there. That came out of the CSV file. So if you wanted to add that, you can add it later. You can actually delete all the tasks and just add the duration in here. But in the meantime, we’re gonna keep moving. I think you probably get how to do this type of stuff. This is a useful one if you wanna just use this or just use this as an example. And if you’ve got other things to import, just kind of play with this format where you’re setting your variables, downloading the CSV file, parsing it, looking stuff up as you’re going. Stuff’s coming out of the CSV file, go look it up. And then you can go create your record or even update a record, whatever you wanna do.
All right. Hey Brian, before you go on, do you have any concerns with the size or the number of records in a CSV file? Is it going to be a concern if it’s say 20,000 records or do you have to parse them, chunk them? Yeah, a couple of concerns there. I mean, it depends on what you’re trying to do. You can’t add 20,000 tasks because I work for a project can’t handle that number of tasks. But you could say, if you wanna add one task or five tasks to a thousand projects, you could do that.
There are maximum amounts of file size. I think it’s maybe five megabytes or do you know what the max is, Steve, off the top of your head for downloading these? I think you can download files different sizes and it’ll actually parse them. The CSV files, they’re not usually a huge file, right? This one with 20 records is not very big. It’s less than 1K.
So it’s really just a simple text file. The main concern you’d have would be the scenario timing out if you’re trying to go through thousands and thousands of records, the scenario could time out eventually.
Usually if that’s the case, if I think it might time out or hit a random error, I will try to record where I leave off in the CSV file, which is a little bit more advanced. You wouldn’t do it in the file. You’d do it maybe in a data store or just try to record what record you’re leaving off on. So you can go pick it up from where you left off. There’s different ways to do that. But just keep in mind that’s possible if you’re trying to import a ton of records, because that’s the main concern is you don’t want it to stop in the middle and then you got to start over. You want it to crash in the middle and then you know exactly where you left off. So you try to set yourself up for that.
That’s a more advanced thing. Thank you. We can go any other things coming in or? Nothing that’s outstanding right now. Okay, cool. All right, I’m gonna go back to my webinar scenario. In fact, for the second one, we’re gonna take part of the first one. So the second one, we’ll go back to the presentation here if I could find it.
There it is. Second one. This one, we’re going to create custom form field values. And these are really, really useful for say, a drop down menu, a checkbox, that type of stuff. These are actual ones that you might use on forms. A lot of customers have 50 or 100 or 200 of these checkbox values or pull down values. So that’s really what this is. It’s just to show how you might import these types of things so that you don’t have to go type them all by hand. I think this is really useful. We use this all the time for different things in Fusion scenarios. Sometimes you might encounter from an external system, a new value that you’ve never seen before. Sometimes I’ll do the very similar stuff that we’re doing here to go check to see if it already exists in the drop down menu. And if not, I will add it, right? Do that all the time in Fusion. So this one is really the same kind of thing, the Excel file, save as a CSV, upload it to Workfront. And then we know the document ID. In this case, I want the project ID, and I think we’re also using a program ID.
We’ll take a look at it in a minute. And then we need to really locate this drop down field, what’s called a parameter ID. And that’s the maybe the trickiest part of this is going to find that drop down field and getting the parameter ID. So I’ll kind of walk through what that looks like. But in terms of starting the scenario though, we can actually start with the same three modules. So what I usually like to do there is I’ll go into my existing scenario. If you click into it, so you’re in the design mode here, if you hold down the shift button, you can draw a box around the first three modules, because we can reuse these. So you don’t have to keep doing them over and over. So if you do that, hold down the shift button, draw a box, it should have these little dashes. You can copy the modules, right click in the middle of any of them, copy the modules, and then we’re gonna do a new scenario and pop them in. So I’m just gonna go back out to here. This is my folder, create a new scenario.
You don’t need any of this stuff that pops up. I usually just left click to get rid of that. And then I’m gonna right click and paste. And then we’re already off and running on our second scenario. And what it does is it automatically tries to hook into this first one. I don’t care about that first one. I don’t care about this question mark. I’m just gonna right click and delete it. And then it’s gonna start on this first one, which is my purple set multiple. So this is our second scenario, which is gonna be 2.0 import parameter values to drop down.
And so in order to do this one, we’ll go and modify this first one here. Or no, it doesn’t look like I do need a, I don’t need a portfolio. That’s the third one. So this one, I do need a CSV document ID, and I’m gonna keep my project ID. And the third one I’m gonna add is a parameter ID.
Parameter ID I’ll explain right now.
So in order to do this one, I’m gonna go in Workfront. I’m gonna go over to my setup area.
If you don’t have access to the setup area, this could be very difficult.
In my forms, I have my test webinar form, right, this guy here.
And what I’m gonna do is I have this one I was playing around. I’m gonna play around with a new one here, a new field in my form called, it’s gonna be a single slight dropdown. This works for multi-select and check boxes also. I’ll do a single select web, and I’ll call this my live webinar dropdown.
Right, and it defaults, you can see the choice one and choice two, right? What’s important is we gotta go look this field up. So as soon as I hit apply, and maybe save and close, just hit save and close here, it’ll take me back to this area where I can see all my custom forms. On the left, I have my fields. So in order to get the parameter ID, the parameter ID is the form field ID, that’s what it is. So I need to go find what is the ID for that field. Normally you have a field list that looks like this. These are all my fields. And I can go find it, I have it on the clipboard. I can say this is my live webinar dropdown, and I found it here. Because I have the field name on the clipboard. What I did was I clicked this little magnifying glass. Live webinar dropdown.
It doesn’t help us because it doesn’t give us the parameter ID.
So in order to get it, and this is a thing that to get all the IDs out of a lot of these objects in the setup area, will create a view.
And the views are under these eyeballs. And the eyeball on the right is this field list. The views in Workfront are for changing the columns. You wanna change the columns, it’s the same data, just different columns.
So I’m gonna say new view, I’m gonna say parameter ID is my new view. It has all these defaults at the bottom. What I really wanna do is add the ID here. And it’s just under parameter. You see if I type the word ID, it says external reference ID, and the second one down is the one I want, is ID by itself.
And I know this is a little obscure for folks that aren’t used to this, but this is a very, very useful thing to do, this import. And sometimes I’ll move this ID a little bit to the left here in the view, so it’s right next to the name. So if I save the view after I drop the ID in here, if I’m going too fast, or if you’re having trouble with this, you can review the recording and do this later, but you’re just adding the ID to the view. And so when you’re done and it works correctly, you can see the parameter ID here, or it might be off the far right if you just add it and don’t move it. But now if I hit the magnifying glass and search for my live webinar dropdown, it’s that one right there, there’s my ID.
So I don’t know how confusing that is, or folks are used to doing these types of views, but remember this technique though, because if you have anything like a company, and if you click on it, and it doesn’t pop it up, or if it doesn’t show you anything more, a grid for instance, in the URL, you might use this view technique to go add the ID there. It’s really, really useful in fusion. So I’ve got my ID, my grid ID, and I’m gonna go ahead and add it now. So my ID is gonna go right here, I have a placeholder for it called parameter ID, and that’s it. So the big difference between this one and the previous one is we’re actually gonna do a custom API call after we download the CSV file. We don’t have the right CSV file though. We can use the same project, but isn’t it the wrong CSV file on it? Because we have a new one, the new one is just called a parameter value, and it looks like this, this is the new one, sorry, it’s called dropdown values, this is the new CSV file, and you can see dropdown values one through 40. I use a lot of these because this is typical, you don’t wanna type one through 40 by hand, right? So you kinda use one of these to speed it up.
So to get back to my project, I always use this recent area, the upper right looks like a timer or something, and then I click on the recent project, this is where I wanna be. And so on the documents here, I can go and upload my new CSV file. The new CSV file I have is called, let me save it, let’s save this one.
So I can’t find it, so I’m just gonna save this one under file, create export and download the CSV file.
There’s, it’ll stick it in my downloads area.
And I’m gonna just upload it here from my downloads, it pops it right in here in my downloads area, just gonna drag it over here and create a new file.
Right next to my old one, it changed the name slightly, but it says drop down value sheet by C, it doesn’t matter what the name is. Same thing we did before, once you get in there, click on document details.
The first ID after the doc slot document slashes, the grid for this is the document ID. And then I’m gonna put that one in here. This is my document ID, CSV document ID replaces it.
Hope everybody’s following me along at home. So far, we’ve got these three things filled out, the CSV document ID, the project ID and the parameter ID.
So in this case, the next thing we’re gonna do is download the CSV file and parse it. This one, as you remember, doesn’t have as many columns. In fact, it only has one column in there. It has the one column, which is just the name of the parameter. So I’m gonna go change the number of columns from four to one and I’m gonna run it and hit run anyway. And this thing should parse the file. If I did everything right, I should get one, one, one like this and this is gonna be a bunch of bundles with drop down value one, two, three, four, five. Right here are my different drop down values from the CSV file.
All right, from here, this is where it gets different than the other one because if you go look at, say a search module or a create record module in Workfront, guess what, there is no, if I do a search here, there is no drop down menu, parameter, drop down anything in here, right? You can’t do it with this module. You can’t do a search, you can’t do a create record with this because this is a, it’s an uncommon Workfront field type that we’re working with. So what we need to do is we’re actually gonna create some JSON to go find, we’re gonna find the existing parameter and then we’re going to create it if it doesn’t exist. So I wanna go look up to see if we can, if that parameter value that’s coming out of here, I wanna go into the parameter and say, does this exist? Does this exist? Does this exist? And if it doesn’t exist, I’m gonna go create it in the drop down menu. That’s the plan.
So the first thing we can do is we need to create JSON to do that, because in order to create the parameter, we’re going to use some JSON for it. So I have a JSON example in the downloadable files, you can find it or we’re just gonna create it from scratch. So there’s two ways to do it. So we’re gonna just type in here JSON and we’re gonna add a create JSON module. Don’t have a data structure yet. If you click add, you can paste it in from here if you want to, I have, this is what it looks like. You can copy and paste it, it’s just label value parameter ID. If you paste it in to the generator, it’ll create the JSON structure you want. I’m gonna just do it from scratch though and it’s pretty easy. I want, the first thing will be label, a lowercase, lowercase is important, label. The next one’s gonna be value.
And the third one’s gonna be parameter ID and the ID is uppercase.
Parameter ID like this. Or once again, you can click the generate, paste it in and then save it. It’ll end up just like this label value parameter ID.
Okay, so the funny thing is we actually have all of these things. We have the label, the value, the parameter ID. In fact, the label and the value are the same thing. We’re gonna use the dropdown value from the CSV file and the value. And the parameter ID is already way down here. So we have parameter ID also, it’s in our first item. And this is it. So this is the JSON, it’s not complicated in order to create a new parameter value. This is what it expects, label value parameter ID. Before we create it though, we’re gonna see if that parameter exists already. And this is where you get to the custom API call. So because this isn’t a major object in Workfront, you have to do a custom API call. These are not that complicated. Custom API call needs what kind of object is this? And it’s a parameter option. It’s a P-O-P-T, parameter option. And we do parameter option slash search because I wanna find one that exists. And all I need to do to search for it is I need to add to the query string the two things that it needs, the parameter ID, right? The parameter ID that we’ve set earlier, that’s the field itself. What’s the parameter ID? And then I need the value that we’re looking for. The value is coming out of the dropdown. That’s my dropdown value. So once again, there’s two things we need to look for in this search. The parameter ID I’m saying, go find on this particular field, go see if that dropdown menu exists.
And so once I do that, I can hit play and see what happens. These should all come out empty. And then you should go through these and do 40 searches and not find anything.
And the answer is it doesn’t find anything. And that’s on purpose because they don’t exist in there yet. But I’m gonna rename this and say, find existing parameter or value, field value, right? Parameter option field value. That’s what I’m looking for. I’m looking to see if it exists already.
And then what I wanna do is use a filter after this, but I’m not ready for that. But I’m gonna use the filter to create the option. And this is the last module for this. It’s just another custom API call, which is a same record type as the parameter option POPT. In this case, I’m gonna create one. So it’s a post instead of a get. I’m gonna create the record if it doesn’t exist. The thing is we’ve already created the JSON for it. It’s the output from our create JSON and that’s it. So the only thing left is to make sure the filter is in place. So I rename this and say, create parameter or create field value, right? Once again, if I’m going too fast, Steve’s not doing his job to tell me that I’m going too fast. But if I am doing my job, going too fast, go back through the recording and watch this. This is where it’s just POPT, it’s a post, and then pop in the JSON that you created over here, these three things. The only way to, you have to make sure that the data does not exist from here though. So you say the data here does not exist and it should handle that. I believe it should handle that. So it says the field not value, not found in my filter. Once again, I click the three dots here. I said in a label field value not found and I said the condition is this data from the previous one does not exist or it’s empty.
And so in this case, I’m just gonna hit run once.
And if it did it properly, it’s gonna come through and oh, it didn’t like my filter. My filter didn’t like it. So what I am gonna do if this is the case is I’m gonna actually go back to the first one, I’m gonna run this one by itself because I do want it to return something. This is kind of a trick that we’ll do to troubleshoot these. I’m gonna run this on its own and I’m gonna put the parameter ID and I’m gonna put one that does exist one, right? Exists here, which is the field value that exists.
Let’s go find it.
What’s the default choice, Steve? It’s like choice one or something? Yeah.
Is it my choice one or? No, it should just be choice one. Choice one, choice one. So I’m gonna pop that in and the parameter ID and the value is choice one. Run this by itself and it does return a record.
When it returns a record, the most recent return from this one will show up in the history.
And so in this case, it’s not the data here. Actually the data ID that I want does not exist.
So I can only get that when I run it and it actually returns the value. So I’ll actually do these in these scenarios is I’ll run it and feed a value that works into here and then I’ll build the filter after that. So I know this will work. So if it does work properly, once again, it’ll get through there and it’ll create the value. The main reason which it’s doing right now, but the main reason I wanna do this though is if I run this a second time, what’s gonna happen, Steve, I’m quizzing you. What’s gonna happen if I run this a second time and if I did the filter properly? I hope you’re not talking to me, I haven’t been. I am, you’re the only Steve here. But I’m not watching you because I’m answering all of the smart questions that are coming from your viewers. But I’m trying to quiz you in the middle of the presentation.
So the answer is if I run this again and let’s actually see if it worked in work for right here. Let’s go back there. But in work front, if I refresh this, this is my test form. It should have all my values in here, including choice one, choice two, which are in here somewhere. But here’s my value one by value two, right? They’re all in here, right? So I just populated this. If I run this again, it won’t populate anything else because of my filter. So if I go again, the filter is important and it stops it all here because this one finds it. It says it already exists. It’s going to add it, which is one of the more valuable pieces of this scenario. Does this already exist? If it is unique, these are all unique and they have to be unique. So if you do try to add one here, it won’t do it.
It’ll actually break.
I know we’re running a little short on time. This always kind of seems to happen. I was trying to get the time right on these. I’m gonna go through exporting a CSV file, but I’m gonna speed it up a little bit. And then I’m gonna do a demo after that. So if you don’t mind, I will save this one. I’m gonna do an export and speed it up, try to get this one done in five or six minutes. So bear with me. I’m already going fast. For this one, it does start with a set multiple again.
So I’m gonna go tools, set multiple variables. And this is going to export a CSV file. And it’s really just a list of projects. The variable name, I’m gonna start with my portfolio ID.
And I’m gonna go grab that in a minute. I need my project ID.
It could get from the previous scenario or you can get it from a project. And then I have my CSV file name this time because we’re going to export this and create a CSV file. So I’m gonna say test, export projects.csv. It is important to get the CSV in here. It needs the .csv for these to actually open properly. So go ahead and add the .csv, whatever your test name is. I’ll call this 3.0 export CSV.
All right, so we’ll set the scenario variables. I’m gonna go grab my two things that I need. I’ll go here, I’ll go to my recent items and get to my project and my project ID. Project ID, same as the last two.
Actually, this needs the project ID because I need a place to upload the file. That’s why I need it. It’s gonna be a list of projects really. Portfolio ID here is gonna be same one here. This is my portfolio. Actually, this one’s got a bunch of products in it. That’s fine, I’ll use this one. So you’ll find a valid portfolio ID that has projects in it. That’s the only requirement. We’re just gonna do project export. Portfolio ID, add that here.
So I have my three things I need. I have my portfolio ID, my project ID, and my CSV file name.
Then I’m just gonna do a normal search.
We’ll set it under work front and search. I’ll do a search legacy. These aren’t used to these more. There’s no custom form involved. And all I’m gonna do is get products by portfolio. So the record type is projects.
I’m gonna say as many as you can get, the max is 2,000. And the only thing I’m gonna search on is the portfolio ID.
That’s it. And I have the portfolio ID. It’s in my variable. So I’m gonna say the portfolio ID is equal to the portfolio ID that I sent in my first one. And the output I want, I’ll get the name, the ID, I got the ID and the name, and the owner ID.
Oh, I need percent complete. Speed things up. You can do control F.
You can find owner ID. You want it in the outputs. And I’m gonna get percent complete.
All right.
And control F is nice because it speeds you through to find these fields. So I’m gonna say get a project info.
Oh, can’t spell. And then I’m going to then look up the owner because I don’t know the owner’s name. This is pretty typical when you do these. If I run this right now, it’s gonna go get all the products in this portfolio, but it gives me the owner ID.
So in this case, I’m just gonna go ahead and look up the owner name, which I’m gonna do next. It’s just gonna be another search. And in this case, an owner is a user. So I go find the user.
First matching record. First matching because I only have one owner that I wanna find.
The only thing I’m gonna search on is the ID here.
So the owner, the ID is equal to the owner ID here that’s coming out of my search.
And then I really want is the owner’s name. So I’m gonna just find the name in here. Just do control F, find the name. I know I’m going fast. I’m just trying to get through this. We just have 12 minutes left, looks like. So I’m gonna say rename is get project owner name.
And hopefully at least you’re following along with the fusion scenarios. It should be very similar to these in the bundle.
So then once I run this, I can run this by itself again. It didn’t like something. It said invalid ID. Oh, oh wait, the owner is not required. Some products did not have an owner.
So if that’s the case, I’m gonna show you a quick trick on how to handle that. So I’m gonna go ahead and do that. Wait, hang on a sec. Yeah, this is the owner ID.
So I had another portfolio where it wasn’t failing on that, but I’ll do this real quick. So I’m gonna go get my own user account or just go to get another user.
I’m just gonna get another user and put it in here in case. So if the owner ID is empty, that’s why it’s failing here. So I’m gonna say, I do an if empty function.
And it says, if that owner is empty, then just get me the one that I want. And how this reads is if this owner ID doesn’t exist, then just plug in this other one. This is a pretty useful one. If you see this kind of failure, the if empty is kind of useful. So I’m just gonna make sure just to do this so that it doesn’t fail here. So it’s gonna return a bunch of owners and it returned 18 products and potential owners.
I just did this to make sure it doesn’t fail so that I don’t want it to fail for the example. But the if empty is a good trick here if you want it, if it is failing because it’s missing an ID, owner is not required.
So the third thing here is just to export to the CSV file. So this is a CSV module.
It’s a create CSV advanced is what we’re doing here.
Create CSV advanced, it wants the source module. This is the search that you’re doing initially. And it’s the get project info search. So I’m gonna go back to this one because that’s the initial search. Data structure doesn’t exist. This is what do you want your CSV file to look like. And I’m just gonna keep it simple here. We’re gonna add a structure at CSV project export and it’s just gonna say the project name.
And then I’m gonna do project ID.
And I’m gonna say the owner name.
And that’s it, just these three items for now just to keep it simpler. We can do percent complete also, we’re asking for that, right? So this is the idea. This is nice because it’s very simple. You just have, you just add these three little four text fields and you can export these pretty quickly. So the product name is gonna come out of the first one. It’s gonna be the name of the project, get project info name, project ID also comes out of that one.
The owner name comes out of the next one. I searched by owner and then the percent complete comes out of the first one. So I’ve got name, project ID, owner name, percent complete. This is really, really useful for these advanced exports here. The CSV, create CSV advanced allows you to do the data structure, which is the structure of your CSV file, it’s fantastic. So then all I have to do is now when you run this, it creates a CSV file on this last module, puts all your records in it. And then all I have to do is upload it. So then I do an upload record, upload document.
I don’t know the difference between these two, let’s do legacy.
Related record ID is what record is this file going on? And that’s my project. So that’s my project. What record type, what type of record is that? Because you can put a document on a user if you wanted to, but I’m gonna put it on a project. This is a project.
And then it says, what’s the document name? I already have that in here, it’s my CSV file name. What’s the file content? It’s the text that’s coming out of the create CSV file. CSV files are text, right? So text is coming out of there. So that’s really it. You say, upload doc to project.
That’s it. So I’m gonna hit save and run it.
And it’s going through all the records. And then it found 18 records. Now it’s gonna try to upload it to the project, which it does. When it does that, it gives you the project ID, but it also has a name of the file, which is test export project. So if I go back to that project I was on, using this handy thing again, CSV export, I should see test export project CSV, which is the one I just did. This guy has all my products in it. In the example I provided, here’s what it looks like. It has four columns.
I only did four columns. The example I provided, I actually also construct a link to the project, if that’s helpful. I can use that as well. Little fancier, real short on time, so I skipped that guy.
And that’s really it for the third scenario. Once again, I know I’m going fast, but trying to get a lot in in a short period of time. Please review the recording.
What I did want to show you real quick was, I’ll do this in two minutes, but then we’ll take a couple questions if we want. But how to use an import queue in order to, see if I can do this, really just a request queue to trigger an import. And you can send an email to an endpoint, really just an email address. You send an email to an email address that’s related to a queue. And that’s what this does. This is my queue import here.
And so this one, all it is is a request queue. If you know how to set these up in Workfront, this is a Workfront, it’s a triggering event here in the first module. And I’m just saying the project ID equals my request queue. So trigger this one, somebody sends a request to my request queue. It’s pretty common, right? Then I’m sleeping for 10 seconds. And then I’m gonna, because it creates the issue here, but it doesn’t create the document right away. So I’m gonna sleep for 10 seconds. Then I can go get the CSV file on the document with a document search. That’s what this is. Searching for the document on that request. If I find it and it’s a CSV file, it’s an ID and it’s a CSV file, I can download it, parse it, and then do what I want with it, which is pretty cool. So then in order to trigger this, you’d all actually, all you have to do is send a CSV file to the endpoint.
And to do that, I’ll show a quick demo here and see if it gets work. I do a new email.
And here’s my email address. I’ll show you this in a sec, but it’s the queue private email address. And these are, you just set up your queue to handle this. Test CSV import.
And I’m gonna send a CSV file to this using a, it’s the same one as task CSV. It says document attachment.
And I hit send. What it does is on my queue project, which is this one, this one set up to handle imports or settled to handle these imports. It’s really just a normal project queue.
And so if it runs and it triggers properly, it’ll, as soon as this thing receives the file, it receives the request from the email intake, it’s this one. It’ll trigger this fusion scenario like this. It’ll sleep for 10 seconds. And then it’ll search to see if there’s a CSV file and then it’ll download it and then it’ll parse it. So when it parses the CSV file, this is my task CSV file I attached to it. And this is pretty useful for importing a CSV file in a regular basis. You can just have some automated process, send it to an endpoint. It’s a really kind of fun way to do this. On the queue project here, you can see the main trick is once this thing is an active status, you can enable the request intake via email and then you tell it what’s the email address. And then just email a CSV file and attachment to that email address. It’ll import your CSV file. I know just under the wire here, maybe not a lot of time for questions, but jump, get in there if I know it went too fast. I hope you’ll go back and look at the recording on that one to see how I did it. We’ll send some stuff afterwards as well.
Nicole, Steve, we have like one minute, two minutes for questions. I don’t know what you wanna do here. Yeah, honestly, I think Steve was rapid fire answering questions in the chat. So I think there was only maybe two or three unanswered questions and, you know, I’ll just run through them super fast. And I wanna say the answer is yes for this one. This was an example of one around the task CSV. We can add more columns like predecessors, milestones, plan hours, duration that can added. I imagine all of that can be added as well in addition to like job role.
Yes, predecessors in particular might be a little trickier cause you gotta go to get the ID of the predecessor in order to add that, but you can go search for it and add the ID if you wanna do it that way, you can do that, yeah. Okay. Figure out what the ID is, but yeah, you can add more and more and more stuff, whatever you really want for the task import and just do it one at a time, practice on a test project and see if you can get it to import things the way you want it to. Perfect.
I also put, Cynthia put a link to a survey. It’s an anonymous survey. If you could just share some feedback on today’s session, that would be great before you do drop. I have a list of Fusion resources in the deck. I’m not even gonna go through them at this point because we have one minute left. But the one thing that I did wanna call out was one user groups, there’s a handful of new user groups, virtual like SIS admin meetups for different areas across the country. So be sure to join those if you are interested in connecting with other folks. And then most importantly, skill exchange is happening this Thursday at nine o’clock Pacific time, 12 o’clock Eastern time for Workfront. There are two tracks, the Learn track, the Grow track. It’s a mix of Adobe experts, customers, our very own Cynthia is gonna be MCing one of the tracks. So there’s gonna be a handful of good content coming for you on Thursday. Even if you can’t attend, I really encourage you to just register so that you get copies of the recordings.
But I think that’s all I have. And honestly, top of the hour, I think there was one more question that was unanswered. Oh, go ahead.
Oh, really, I encourage everyone to go back and watch the recording. I know it’s going fast, kind of on purpose. So you can watch it back at 50% speed if you like. Unless I’ll slow down in that case.
Yes, and you guys will get a link to the recording in your follow up. We’re gonna publish it to Experiancic so you’ll have opportunity to ask questions. And then the only other question I think that went unanswered was, is it possible to use Fusion to do an import of custom prompts for a report? I’m not trying to do that. Steve, you know, have you ever seen that? The usual answer is if it’s in the API, you can do it. I haven’t seen custom prompts in the API view. No, I had to punt on that one myself. I wasn’t sure. I would say probably not on that. I don’t think you can do that in the API. You can look at the API Explorer if you know where that is and see if it’s in there. I don’t think it is. So I’m gonna probably have to say no on that one.
Okay, all right, one minute over the hour. I wanna be respectful of everyone’s time here. Brian, a huge thank you, Steve. Thank you so much for rapid firing, answering all those questions in the chat.
You guys did an amazing job. I hope you guys learned a lot today. Feel free to practice along, ask some questions, and hopefully, I know we’re working with Brian on some more Fusion series coming with you over the next couple of months. So I’m excited to partner with Professional Services on some more Fusion stuff for you.
All right, that’s all, thank you, everybody. Thanks, guys.
Review the slide deck and watch the on-demand recording to follow along.
Check out the Experience League Community post for downloadable CSV file examples and Fusion CSV Bundle!
New events are added every month, so make sure to check out the Experience League Events page for the latest sessions.