Been breaking things left and right in the rollout of the asana-client-management product. Current shenanigans involve seeing what ways we can work with the Client custom_type.portfolio object.
The Client and Contact
custom_typeobjects feel a little undercooked. See below.
We have this nice little Client record custom field in the product now. We can set this field from the Contacts view. Which is great. So I got to check out its settings and notice we don’t get an “Edit field” option like we do other custom fields…
So, I think to myself, “That’s alright. I’ll go add a new custom field to this object to see if I can learn more about it there.” And I find it! Except it’s called “Client record” in this area.
I figure this is it because it says it’s already added to the portfolio, but no other such field exists on this object like that. At least not that’s visible to me.
So, I go and add this custom field to a project where I can edit it. After looking, it appears to be a sort of custom_type portfolio, set to only show records from a particular table. In this case, the Clients table.
Unfortunately, we’re unable to edit this field because it is used in a template…and that template is not accessible to use in our workspace anywhere because this field was “Created by Asana.” ![]()
So, I think to myself, "No problem! I’ll just make my own version of this field. ![]()
Alas, the option to select Records as the Source and set Reference list filters to Record is in table = Clients is not something we can do yet in the product. ![]()
So, I think to myself, “No problem! I’ll just make a COPY of this field and use that!” ![]()
So, I do just that. Great! Now I have my own version of this field that I can add to projects so I can associate tasks with a Client record! Right? ![]()
No…unfortunately it doesn’t quite work that way. I can add it to projects just fine. But, when I click the dropdown to select a Client object, it says “No matches found.” Even when I begin to type in something. ![]()
So, I think to myself. Well, let me try the one Asana made. You know, the one that works just fine in the Contacts view so we can link a Contact to a Client. ![]()
So I have that one added to a Project, but it also says, “No matches found.” ![]()
Which is odd. You know, because it works just fine in the Contacts view. *Note, that in the Contacts view this record is displayed as Client instead of Client record. ![]()
So, I go to investigate it via the API. My first thought: **Use the Get all custom types associated with an object endpoint by setting the object to my workspace ID. ![]()
Alas, it returns an error…![]()
{
"errors": [
{
"message": "Oops! An unexpected error occurred while processing this request. The input may have contained something the server did not know how to handle. Usually waiting and then retrying the request once fixes this. If the issue is persistent, please navigate to https://help.asana.com and engage with our chatbot, making sure to include the error phrase from this response.",
"phrase": "26 dizzy otters behave fairly well"
}
]
}
So, I think to myself, “Well…what happens if I add a Reference custom field to my project?” ![]()
And what do I see?! The elusive Client records! So I’m positive this is a portfolio of some sort now, so I go to the API and use the Get project portfolio settings for a portfolio endpoint. And finally get some data back on it. So, now we know both the portfolio and the project I created are custom_types. Interesting…![]()
So, I realize that must be what this little Connect to Client button does…
After testing, I realize I cannot connect a project to more than one client using this method. So, I figure, “Why not make a Rule do it for me?”
Surely if this isn’t supposed to work they’ve thought of this and will prevent it, right? ![]()
Nope. The project now exists in both Client objects. ![]()
Confirmed via the API as well.
{
"data": [
{
"gid": "1219009357222242",
"resource_type": "project_portfolio_setting",
"project": {
"gid": "1218899494595301",
"resource_subtype": "custom",
"name": "Field Importer",
"resource_type": "project"
},
"portfolio": {
"gid": "1218890611977396",
"resource_subtype": "default_portfolio",
"name": "Roadmap",
"resource_type": "portfolio"
},
"is_access_control_inherited": false
},
{
"gid": "1219009679068806",
"resource_type": "project_portfolio_setting",
"project": {
"gid": "1218899494595301",
"resource_subtype": "custom",
"name": "Field Importer",
"resource_type": "project"
},
"portfolio": {
"gid": "1218886033809410",
"resource_subtype": "custom",
"name": "CLIENT_A",
"resource_type": "portfolio"
},
"is_access_control_inherited": false
},
{
"gid": "1219009679068812",
"resource_type": "project_portfolio_setting",
"project": {
"gid": "1218899494595301",
"resource_subtype": "custom",
"name": "Field Importer",
"resource_type": "project"
},
"portfolio": {
"gid": "1218885782622030",
"resource_subtype": "custom",
"name": "Client projects",
"resource_type": "portfolio"
},
"is_access_control_inherited": false
},
{
"gid": "1219009679068821",
"resource_type": "project_portfolio_setting",
"project": {
"gid": "1218899494595301",
"resource_subtype": "custom",
"name": "Field Importer",
"resource_type": "project"
},
"portfolio": {
"gid": "1218903254027863",
"resource_subtype": "custom",
"name": "CLIENT_B",
"resource_type": "portfolio"
},
"is_access_control_inherited": false
}
]
}
Takeaway: This product may have been released too early. I’ve been able to break a little over 2 dozen things thus far. Not to mention I somehow have like 5–6 versions of a “Created on”
lookuptype field in my project now that I can’t delete via the UI nor even make appear in the UI anymore. It’s been wild…












