SuperOffice CRM Professionals

Experienced experts in SuperOffice CRM - those primarily responsible for the setup, configuration, maintenance of SuperOffice in an organization, as well as those responsible for the implementation of applications or integrations, or provide consultancy services as to how an integration should be implemented using current industry standards.

LATEST FORUM POSTS

  • The partnersites in SOD are planned to be updated to Release 10.5.4 monday morning. The version is still under development, so the sites will be updated when there are any changes. Featuretoggles turned on for the PartnerSites for 10.5.4 are: NewServiceRequest, LiveRequestUI, HugoAiGpt, HugoAiIframe, HugoAIChat, HugoAISummarize, CustomObjectsv1, CustomObjectsV2 (This featuretoggles are removed from code and will be removed from the sites monday 24.march: QuoteSCIL)

    6 h, 30 m ago | 02:23 PM
  • Hi there, i have a customer who'd like a custom address format. In order to do this on-premise i would just copy a layout that already exists, and change the variables i need. Therefore i constructed the following CRM-Script that should copy the 4 other lines, and add them to the addressformat table, with my changed values:   #setLanguageLevel 4; SearchEngine se; se.addField('AddressFormat.addressformat_id'); se.addField('AddressFormat.name'); se.addField('AddressFormat.layout_id'); se.addField('AddressFormat.atype_idx'); se.addField('AddressFormat.address1_line'); se.addField('AddressFormat.address1_subpos'); se.addField('AddressFormat.address1_leadtext'); se.addField('AddressFormat.address1_zip'); se.addField('AddressFormat.address1_length'); se.addField('AddressFormat.address1_flags'); se.addField('AddressFormat.address1_mask'); se.addField('AddressFormat.address2_line'); se.addField('AddressFormat.address2_subpos'); se.addField('AddressFormat.address2_leadtext'); se.addField('AddressFormat.address2_zip'); se.addField('AddressFormat.address2_length'); se.addField('AddressFormat.address2_flags'); se.addField('AddressFormat.address2_mask'); se.addField('AddressFormat.address3_line'); se.addField('AddressFormat.address3_subpos'); se.addField('AddressFormat.address3_leadtext'); se.addField('AddressFormat.address3_zip'); se.addField('AddressFormat.address3_length'); se.addField('AddressFormat.address3_flags'); se.addField('AddressFormat.address3_mask'); se.addField('AddressFormat.city_line'); se.addField('AddressFormat.city_subpos'); se.addField('AddressFormat.city_leadtext'); se.addField('AddressFormat.city_zip'); se.addField('AddressFormat.city_length'); se.addField('AddressFormat.city_flags'); se.addField('AddressFormat.city_mask'); se.addField('AddressFormat.county_line'); se.addField('AddressFormat.county_subpos'); se.addField('AddressFormat.county_leadtext'); se.addField('AddressFormat.county_zip'); se.addField('AddressFormat.county_length'); se.addField('AddressFormat.county_flags'); se.addField('AddressFormat.county_mask'); se.addField('AddressFormat.state_line'); se.addField('AddressFormat.state_subpos'); se.addField('AddressFormat.state_leadtext'); se.addField('AddressFormat.state_zip'); se.addField('AddressFormat.state_length'); se.addField('AddressFormat.state_flags'); se.addField('AddressFormat.state_mask'); se.addField('AddressFormat.zip_line'); se.addField('AddressFormat.zip_subpos'); se.addField('AddressFormat.zip_leadtext'); se.addField('AddressFormat.zip_zip'); se.addField('AddressFormat.zip_length'); se.addField('AddressFormat.zip_flags'); se.addField('AddressFormat.zip_mask'); se.addField('AddressFormat.extraFlags'); se.addField('AddressFormat.labelLayout'); se.addField('AddressFormat.registered'); se.addField('AddressFormat.registered_associate_id'); se.addField('AddressFormat.updated'); se.addField('AddressFormat.updated_associate_id'); se.addField('AddressFormat.updatedCount'); se.addField('AddressFormat.labelLayout2'); se.addField('AddressFormat.isBuiltIn'); se.addCriteria('AddressFormat.addressformat_id', 'In', '211,212,213,214'); //print(se.executeHTMLTable()); SearchEngine sequence; sequence.addField('sequence.id'); sequence.addField('sequence.next_id'); sequence.addField('sequence.TableName'); sequence.addField('sequence.TableNumber'); sequence.addCriteria('sequence.id', 'In', '67'); sequence.execute(); Integer next = sequence.getField('sequence.next_id').toInteger(); //Copy the rows from the search engine to 4 new rows, named "Other - 2 address lines" for(se.execute(); !se.eof(); se.next()){ SearchEngine insert; insert.addData('AddressFormat.addressformat_id', next.toString()); insert.addData('AddressFormat.name', 'Other - 2 address lines'); insert.addData('AddressFormat.layout_id', se.getField('AddressFormat.layout_id')); insert.addData('AddressFormat.atype_idx', se.getField('AddressFormat.atype_idx')); insert.addData('AddressFormat.address1_line', se.getField('AddressFormat.address1_line')); insert.addData('AddressFormat.address1_subpos', se.getField('AddressFormat.address1_subpos')); insert.addData('AddressFormat.address1_leadtext', se.getField('AddressFormat.address1_leadtext')); insert.addData('AddressFormat.address1_zip', se.getField('AddressFormat.address1_zip')); insert.addData('AddressFormat.address1_length', se.getField('AddressFormat.address1_length')); insert.addData('AddressFormat.address1_flags', se.getField('AddressFormat.address1_flags')); insert.addData('AddressFormat.address1_mask', se.getField('AddressFormat.address1_mask')); insert.addData('AddressFormat.address2_line', se.getField('AddressFormat.address2_line')); insert.addData('AddressFormat.address2_subpos', se.getField('AddressFormat.address2_subpos')); insert.addData('AddressFormat.address2_leadtext', se.getField('AddressFormat.address2_leadtext')); insert.addData('AddressFormat.address2_zip', se.getField('AddressFormat.address2_zip')); insert.addData('AddressFormat.address2_length', se.getField('AddressFormat.address2_length')); insert.addData('AddressFormat.address2_flags', se.getField('AddressFormat.address2_flags')); insert.addData('AddressFormat.address2_mask', se.getField('AddressFormat.address2_mask')); insert.addData('AddressFormat.address3_line', '0'); insert.addData('AddressFormat.address3_subpos', '0'); insert.addData('AddressFormat.address3_leadtext', '0'); insert.addData('AddressFormat.address3_zip', se.getField('AddressFormat.address3_zip')); insert.addData('AddressFormat.address3_length', '0'); insert.addData('AddressFormat.address3_flags', se.getField('AddressFormat.address3_flags')); insert.addData('AddressFormat.address3_mask', se.getField('AddressFormat.address3_mask')); insert.addData('AddressFormat.city_line', '3'); insert.addData('AddressFormat.city_subpos', se.getField('AddressFormat.city_subpos')); insert.addData('AddressFormat.city_leadtext', se.getField('AddressFormat.city_leadtext')); insert.addData('AddressFormat.city_zip', se.getField('AddressFormat.city_zip')); insert.addData('AddressFormat.city_length', se.getField('AddressFormat.city_length')); insert.addData('AddressFormat.city_flags', se.getField('AddressFormat.city_flags')); insert.addData('AddressFormat.city_mask', se.getField('AddressFormat.city_mask')); insert.addData('AddressFormat.county_line', se.getField('AddressFormat.county_line')); insert.addData('AddressFormat.county_subpos', se.getField('AddressFormat.county_subpos')); insert.addData('AddressFormat.county_leadtext', se.getField('AddressFormat.county_leadtext')); insert.addData('AddressFormat.county_zip', se.getField('AddressFormat.county_zip')); insert.addData('AddressFormat.county_length', se.getField('AddressFormat.county_length')); insert.addData('AddressFormat.county_flags', se.getField('AddressFormat.county_flags')); insert.addData('AddressFormat.county_mask', se.getField('AddressFormat.county_mask')); insert.addData('AddressFormat.state_line', se.getField('AddressFormat.state_line')); insert.addData('AddressFormat.state_subpos', se.getField('AddressFormat.state_subpos')); insert.addData('AddressFormat.state_leadtext', se.getField('AddressFormat.state_leadtext')); insert.addData('AddressFormat.state_zip', se.getField('AddressFormat.state_zip')); insert.addData('AddressFormat.state_length', se.getField('AddressFormat.state_length')); insert.addData('AddressFormat.state_flags', se.getField('AddressFormat.state_flags')); insert.addData('AddressFormat.state_mask', se.getField('AddressFormat.state_mask')); insert.addData('AddressFormat.zip_line', '3'); insert.addData('AddressFormat.zip_subpos', se.getField('AddressFormat.zip_subpos')); insert.addData('AddressFormat.zip_leadtext', se.getField('AddressFormat.zip_leadtext')); insert.addData('AddressFormat.zip_zip', se.getField('AddressFormat.zip_zip')); insert.addData('AddressFormat.zip_length', se.getField('AddressFormat.zip_length')); insert.addData('AddressFormat.zip_flags', se.getField('AddressFormat.zip_flags')); insert.addData('AddressFormat.zip_mask', se.getField('AddressFormat.zip_mask')); insert.addData('AddressFormat.extraFlags', se.getField('AddressFormat.extraFlags')); insert.addData('AddressFormat.labelLayout', se.getField('AddressFormat.labelLayout')); insert.addData('AddressFormat.registered', se.getField('AddressFormat.registered')); insert.addData('AddressFormat.registered_associate_id', se.getField('AddressFormat.registered_associate_id')); insert.addData('AddressFormat.updated', se.getField('AddressFormat.updated')); insert.addData('AddressFormat.updated_associate_id', se.getField('AddressFormat.updated_associate_id')); insert.addData('AddressFormat.updatedCount', se.getField('AddressFormat.updatedCount')); insert.addData('AddressFormat.labelLayout2', se.getField('AddressFormat.labelLayout2')); insert.addData('AddressFormat.isBuiltIn', 'false'); insert.insert(); next = next + 1; } //Update sequence with the new next_id sequence.addData('sequence.next_id', next.toString()); sequence.addCriteria('sequence.id', 'In', '67'); sequence.update();   This Does not work however. I'm getting the following error, that does not really provide me with any help:   So do i really have to send a SQL command to support for them to execute, or what is best practise for me to create a custom address format with the tools available?   Thanks!  

    8 h, 24 m ago | 12:29 PM
  • Would also like to see changes of the category of the Company. In the example below i changed from "Eksisterende kunde" --> "Potensiell kunde", and it only seems like the value of the Tooltip stays on the old value in the "Before trigger" script. Before Trigger: ContactEntity.Category.Id --> 2 ContactEntity.Category.Tooltip --> Alle eksisterende kunder skal vises her. ContactEntity.Category.Value --> Potensiell kunde After Trigger: ContactEntity.Category.Id --> 2 ContactEntity.Category.Tooltip --> ContactEntity.Category.Value --> Potensiell kunde

    8 h, 25 m ago | 12:28 PM
  • Hello Tony, Only custom objects are used in the current projects. For historical reasons, however, we also still have some projects with CDD. From which version will CDD be deprecated?

    12 h, 22 m ago | 08:31 AM
  • It's all backend changes. Nothing in the UI. Recall this blog post: https://community.superoffice.com/en/technical/blogs/archive/superoffice-11-and-12-overview-for-partners/

    20 Mar 2025 | 09:29 AM

Technical blog posts

New Quote and ERP Connector Samples for .NET 8.

Hello Developers, We’re excited to share some great news: We’ve created a new GitHub repository with sample code to set up a QuoteConnector and ErpConnector using .NET 8! This new project is designed to be more developer-friendly and easier to understand. What's New in the Repo? We’ve taken a fresh approach with this project by simplifying and streamlining the sample. Here's what you can expect: No Frontend: We've removed the frontend to keep the focus on backend functionality. Excel as datasource:  Both the connectors use Excel-documents as their datasource. This makes it easy to add/edit/remove data while testing. Multi-Tenancy support: For clarity, we have ommited storing context/tenant information in .json files, empowering you to add these features if needed.   Repo Overview The new repository consists of three projects: ConnectorService (WCF on .NET 8): Contains the WCF endpoints called from SuperOffice. ErpConnector (.NET Standard 2.0): Implements the ERP integration logic. QuoteConnector (.NET Standard 2.0): Implements the QuoteConnector logic. > Why .NET Standard 2.0? > This allows compatibility with existing framework projects, making it easier to integrate the connectors into your current solutions.   Clarifying Terminology You may have noticed terms like "ErpConnector," "ErpSyncConnector," and "ErpSync" used interchangeably in past documentation. Moving forward, we will standardize on ErpConnector for consistency.   WCF Support on .NET 8 While WCF isn’t natively supported in .NET 8, CoreWCF —a community-driven project now backed by Microsoft—fills this gap. We’ve integrated it into our sample to ensure modern compatibility while maintaining stability.   What About the Old JsonQuoteConnector Sample? The previous sample (built on .NET 4.8) will no longer receive updates and will eventually be archived.  Why Switch to the New Repo? Here's why you'll love the new project: Cleaner, more focused codebase. Easier to understand and extend. Leverages the latest .NET 8 features. Continued support and compatibility with CoreWCF.   Get Started Today! Ready to explore the new repo? Head over to the integration-services repository on GitHub and check it out! We welcome your feedback and any issues—feel free to raise them directly on GitHub.

Eivind Fasting
21/03/2025
thumb_up0 mode_comment0 visibility0

Developer Portal – 2.0 Release

Hello, SuperOffice Developers!   We’re excited to announce a UI upgrade for the SuperOffice Developer Portal in this release! This update brings a refreshed, modernized experience along with several new features to enhance usability and customization.   Release Highlights Brand-New UI for the Developer Portal   The SuperOffice Developer Portal has undergone a significant UI upgrade, aligning seamlessly with the latest SuperOffice 10.5 update. This redesign ensures a more intuitive, modern, and streamlined experience for developers.     Customizable Profile Picture   Partners can now change their profile picture directly within the Developer Portal. The portal supports PNG, GIF, and JPEG formats, with a minimum resolution of 128px and a maximum resolution of 512px (1:1 ratio).   Unfortunately , a s part of this change, we n o longer   use images from Gravatar for profiles on Developer Portal. On the bright side, the community website may shar e the same profile image in the future.       New Settings: Dark Mode & "Remember Me"   We’ve introduced two new Advanced settings for application configuration settings :   Dark m ode s upport – Enable dark mode for a more comfortable viewing experience on the SuperId login page .   Remove r emember m e – Native and Mobile apps do not typically use the Remember Me option during login, and therefore apps now have the option to remove the Remember me checkbox on the SuperID login page .     These settings will be reflected when using SuperOffice CRM Online.   Change Email Address and Phone   Users can now update their email address within the profile section. This allows setting a preferred email for communication and correspondence purposes, independent of the login email. (Note: This email will not be used for authentication.)     Additional updates   As always, we’ve done a number of bug fixes and security enhancements to improve your experience.     Thank you for using the SuperOffice Developer Portal .  

Chamal Asela Perera
28/02/2025
thumb_up1 mode_comment0 visibility9

Developer Portal – 1.30 Release

🎉 Announcing first r elease of the Year! 🎉   Hello, SuperOffice Developers - We are ready to announce the first release for this year Release  Highlights     Introducing the Event Logs for Partners   From this release onwards, we are extending the event logs feature for Partner users. As a partner, you can now see “who-did-what-when" in the Partner and Application areas .     Updates to the error reporting and u ninstall email setting   With this release, multiple email addresses can be added to the reporting email s controls . Additionally, w e now allow partners to specify who should receive emails when a customer navigates to the installed apps section in the App Store, then selects the Uninstall button .     T he Uninstall event on ly creates a request and sends out emails that each recipient listed in Uninstall reporting emails .   T he r eporting email s user experience has also changed in the Developer Portal , providing a modern look and feel.   The uninstall reporting emails may be set on each app under settings, or on the partner under settings .   T he U ninstall reporting email s set under the partner settings will be used unless there is an Uninstall reporting email s set on the application settings .   Changes to the create application wizard for ERP sync and Quote application Historically, the creation of a connector application defaulted to the Standard Application settings. B ased on trends , w e have enabled the creation of custom ERP Sync and Quote applications by default through the Create Application wizard.     Additional updates   As always, we’ve done a number of bug fixes and security enhancements to improve your experience.     Unable to send report a problem from App store.   Fixed a bug that prevented users from reporting a problem from the App Store.     Thank you for using the SuperOffice Developer Portal .  

Chamal Asela Perera
31/01/2025
thumb_up1 mode_comment0 visibility53

Developer Portal - 1.29 Release

🎉 Announcing final release of the year! 🎉   Hello, SuperOffice Developers!   We are ready to announce the last release for this year     Release Highlights     Introducing the Tenants management   The T enant management section is a dedicated area for managing tenants across all development environments. It provides an overview of all tenants by partners and allows you to manage various aspects of their environments.   Key features include:    Tenants Overview    User and site license statistics    Status of the tenants   Request additional tenants   Request consultant access   Request authorization   Introducing the log feature for App store managers   With this release log feature has been enabled for App store managers. This allows managers to view the actions performed within the Developer Portal and App store.   Additional updates   As always, we’ve made a number of bug fixes and security enhancements to improve your experience.    New field Ticket ID : When you request publish a  ticket ID is created that will be visible in the message center . We have now made this link visible for all published apps, partner profiles and configuration .  A vailable on app configuration under advanc ed . For app store information under SEO and partner app store information under versioning.   Mobile menu fix Resolved an issue where admin menu options were not available on the mobile menu.   Thank you for using the SuperOffice Developer Portal .   Have a nice holiday season and happy new year! 🎊  

Chamal Asela Perera
13/12/2024
thumb_up5 mode_comment0 visibility36

SuperOffice’s new UI design available for integrations

Hello integration community!   I’m happy to announce something special we’ve been working on behind the scenes—a sneak peek at our brand-new UI design! Yes, the wait is over: we’re releasing downloadable Figma design files of our upcoming UI to our trusted partners and ISVs months before the official product launch.   This early release isn’t just a visual preview; it’s a collaborative opportunity. We know that our partners and independent software vendors (ISVs) play a crucial role in extending the SuperOffice experience, and we want to give you ample time to explore, adopt, and align with our upcoming look and feel.   Our design team has worked tirelessly to create a modern, user-friendly interface that enhances usability and reflects SuperOffice’s commitment to an intuitive, efficient CRM experience. By making these Figma files available, you get the inside track on how our UI is evolving. Now, you can jump right in and start experimenting with the elements, layouts, and components that will soon define SuperOffice CRM.   Why We’re Sharing Now We want you to be as excited as we are about this transformation! Early access to the Figma files means you can begin adapting your integrations and custom solutions right away, ensuring a seamless fit when the full UI launches. We’re confident that the new design will elevate the experience for both users and developers by providing a fresh, cohesive style across the SuperOffice ecosystem.   What’s Included in the Figma Files   Our Figma files include detailed sketches of core components, color palettes, fonts, and navigation elements. Each piece is crafted to help you envision and adapt to the new look as you integrate your features. You’ll find: Core Design Components: Preview all the essential design pieces that make up the new SuperOffice UI. Color and Typography Guides: Align with our branding for a consistent, polished appearance. Navigation Patterns: Familiarize yourself with the updated navigation flow to enhance user efficiency. How to Get Started   Downloading the Figma files is easy! Simply download the files . Once unzipped, you can start reviewing the content and begin adapting your applications to match the future SuperOffice look and feel!   Thank you for being part of this journey as we elevate SuperOffice CRM to a new standard. Together, let’s create the next level of CRM user experiences!   Stay tuned for more updates, and happy designing!

Tony Yates
01/11/2024
thumb_up5 mode_comment0 visibility135