My question is related to one of my earlier questions.

Exposing the contract object in the customer portal

Basically, we need to expose the Contract object in our customer portal. But SF currently does not allow this. The solution I found here and elsewhere was that we could create a custom object by copying over Contract data.

Initially I thought I could create a custom object mimicking all Contract fields, do a one time copy from Contracts and then let our Contract team use the new object going forward. This was because our contracts have a lot of attachments and attachments cannot be shared between two records. So we would have the storage overhead of two sets of attachments.

But Contracts have built in functionality like "Activate" and possibly more that I am not aware of. Therefore can anybody tell me what functionality I would lose if we switch to the custom object?

It is very unfortunate that we need to perform these workarounds just to display records from a standard object in our customer portal.

There are currently sales force cases open for exposing contracts on the portal and enabling attachments to have more than 1 parent record.


3 Answers 3


In your other question, you expressed reservations at the idea of keeping redundant data, but I really think in your case it sounds like a better bet than trying to wholesale replace Contract.

Assuming that your portal users only need read-only access to contract data, here is what I would do:

  • create a new custom object, let's call it "Contract Detail", that has the fields your portal users need as well as a lookup to Contract.
  • create on update/delete/insert/undelete triggers on Contract which mirror the relevant data to the matching Contract Detail object, including deleting / creating / updating.
  • expose that custom object via portal.

This way, you don't lose the core functionality of Contract, you don't have to change any internal users' business processes, and you get to expose the data via the portal. The redundant data storage isn't optimal but it doesn't really carry any risk if you do the triggers correctly.

  • Marking as answer as we ended up using this.
    – Richard N
    Apr 10, 2015 at 22:40

To reproduce Activating contracts I did the following:

-Created multiple record types ("Unactivated" and "Activated") so I could limit the options available to my users in the Status field.

-Create an Approval Process that only allowed a certain group of people to initially submit. This group of people are the only ones that would be able to "Activate" the contracts.

-When the Approval is submitted I just had it auto-approve, but you could add approvl logic there if you want. For my final approval actions I updated the Record Type to "Activated" and changed the Status field value to "Activated" as well.

This allowed me to mimic the functionality of the Activation.

I also automated Contract End Date and other fields with basic Workflow Rules.

Let me know if you have any questions.

  • Thank you so much for sharing. This will be really helpful. We spent quite some time researching our options and think we should keep the standard Contract object to avoid changing a lot of business processes.
    – Richard N
    Mar 5, 2013 at 16:39

We did something similar in my org for the exact same reason. I wasn't able to find any features that I wasn't able to reproduce with native SalesForce functionality. For example, I reproduced contract activation with Approval Processes and Record Types to ensure a contract could only be marked active through the approval process.

Let me know if you'd like a more detailed explanation.

  • jonnybro thank you very much for your reply. I would surely appreciate it if you could share more details on how you replicated certain features like Activating contracts etc....
    – Richard N
    Feb 20, 2013 at 21:10
  • 1
    See a more detailed response in my other answer.
    – jonnybro
    Feb 21, 2013 at 0:16

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .