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.
QUICK ACCESS:
Shortcuts to common tools and tasks within the Technical Center.
LATEST FORUM POSTS
-
Tony YatesStaff
CRMScript triggers execute in the current user context. You may want to encapsulate the script contents in a try/catch block to avoid unnecessary error dialogs.
23 May 2025 | 02:36 PM -
Tony YatesStaff
The SuperOffice crossmessaging capability is great for sending navigation commands (SoProtocol) to the web client, or issuing an openDocument command, from an iFrame. As we move forward towards version 12, that's not going to change. One of the primary goals for v12 to is to run completely on .NET 8 (or higher), eliminating all dependencies on anything running .NET Framework 4.8 code. The current cross messaging command ajaxMethod depends on legacy code in .NET Framework context, and that means all ajaxMethod commands will cease to function in v12. Are you using it? If so, please reach out (sdk@superoffice.com) and let us know. We will help you figure out how to instrument the same functionality without the ajaxMethod command. Best regards!
23 May 2025 | 01:41 PM -
BM
Beata MartinssonPartnerOh, okay good to know! Thank you :)
23 May 2025 | 06:51 AM -
Tony YatesStaff
Hi Ummair, OK, Here are three ways to get list name from ListTableId: 1: Hardcode a Map based on known table Ids (documented in the Database Reference ) Map listTableMap; listTableMap.insert("219","AcademicTitle"); listTableMap.insert("225","AmountClass"); listTableMap.insert("2","Associate"); listTableMap.insert("61","Business"); listTableMap.insert("64","Category"); listTableMap.insert("70","CompanyInterest"); listTableMap.insert("109","Competitor"); listTableMap.insert("73","ContactInterest"); listTableMap.insert("19","Country"); listTableMap.insert("97","Credited"); listTableMap.insert("112","Currency"); listTableMap.insert("91","Function"); // Proj. Member Type listTableMap.insert("216","Intent"); listTableMap.insert("94","MrMrs"); listTableMap.insert("76","Position"); listTableMap.insert("79","Priority"); listTableMap.insert("82","Rating"); listTableMap.insert("103","Reason"); listTableMap.insert("222","Rejection"); listTableMap.insert("48","Relation"); listTableMap.insert("100","Source"); listTableMap.insert("88","Status"); listTableMap.insert("130","Template"); listTableMap.insert("67","TypeFollowUp"); listTableMap.insert("85","TypeProject"); listTableMap.insert("106","TypeSelection"); listTableMap.insert("136","UserDefined"); listTableMap.insert("59","UserGroup"); String tableName = listTableMap.get("2"); printLine("Table Name: " + tableName); // prints: Associate 2: Dynamically lookup the table name from the sequence table String GetTableName(Integer tableNumber) { String [] searchFields = String("sequence.TableName").split(","); NSArchiveRestrictionInfo[] restrictions; NSArchiveRestrictionInfo res1; res1.SetName("sequence.TableNumber"); res1.SetOperator("="); res1.SetValues(String(tableNumber.toString()).split(",")); restrictions.pushBack(res1); NSArchiveOrderByInfo[] order; String[] entities = String("").split(","); Integer pageSize = 250; NSArchiveAgent archiveAgent; NSArchiveListItem[] rows = archiveAgent.GetArchiveListByColumns("Dynamic", searchFields, order, restrictions, entities, 0, pageSize); foreach (NSArchiveListItem row in rows) { Map rowData = row.GetColumnData(); String tableName = rowData.get(searchFields[0]); return tableName; } } String table = GetTableName(2); printLine("Table Name: " + table); // prints: ASSOCIATE 3: Use the UserDefinedFieldAgent to look up the list name: NSUserDefinedFieldInfoAgent udefAgent; NSUserDefinedFieldInfo udefInfoList = udefAgent.GetUserDefinedFieldFromProgId("SuperOffice:7", 1); // 1: Contact, 2: Person, 3: Project, 4: Sale, 5: Temp, 6: Appointment, 7: Document printLine("List Name: " + udefInfoList.GetMdoListName()); // prints: List Name: business Hope this helps!
20 May 2025 | 04:39 PM -
Tony YatesStaff
Answer to Ummairs question: https://community.superoffice.com/en/technical/forums/api-forums/service-crmscript/get-listitem-by-listid/
19 May 2025 | 11:38 AM
Technical blog posts
Spring API and SDK updates
Hello friends! We have a few announcements and know that all of you will get at least one interesting takeaway from this update! Integration services The first announcement is a little old, but with the latest marketing push to promote more ERP integrations with SuperOffice, its timely to announce our recent refresh of the integration services SDK. This is a GitHub repo that provides sample code for .NET8 web service for hosting a QuoteConnector and ERPConnector endpoints for SuperOffice. https://github.com/SuperOffice/integration-services The key components are: * ConnectorService (.net8) : A wrapper exposing services for the QuoteConnector, using CoreWCF for .NET Core support. * Uses EPPLUS: Utilized for reading/writing Excel files, with a non-commercial license for this sample. * QuoteConnectorWS & ERPConnectorWS: WCF services handling requests and responses for SuperOffice. * ERPConnector (netstandard2.0) * QuoteConnector (netstandard2.0) What's new about this project? First off it is .NET Minimalistic API: Handles reading/writing Excel files and allows uploading/downloading templates. Read more about it on GitHub. Video meeting reservations (version 11) We are very happy to announce a new capability that allows integrations to create video meetings! This enhancement introduces video meeting reservations as distinct business objects, separate from appointment entities. However, the management of these reservations is conveniently located under the Appointment Agent endpoint. Key Endpoints: AppointmentAgent.CreateVideoMeetingReservation AppointmentAgent.DeleteVideoMeetingReservation It's crucial to understand the separation of concerns between appointments and video meetings. Appointments and video meeting reservations are created and persisted independently. This distinction is evident in the SuperOffice client: Creating Appointments: When you create an appointment, it does not need to be saved before you click the video meeting icon to create a video meeting reservation and link it to the appointment. Managing Reservations: You can open an existing appointment and create or remove a video meeting reservation associated with it. The response from the Video Meeting Reservation contains the join URL, which must be added to or removed from the Appointment Entity JoinVideoMeetingUrl property. This new feature streamlines the process of managing video meetings, making it easier and more efficient for partners to integrate video conferencing into their workflows. Enhanced efficiency with webhook FieldValues (version 11) We are excited to announce webhook FieldValues , designed to optimize the efficiency of your integrations. This update introduces a new property called FieldValues in most webhook payloads. Key Features: FieldValues Property: This key-value pair object contains non-sensitive data about the data record, allowing your integrations to determine if additional requests to SuperOffice are necessary. Reduced Requests: By leveraging FieldValues, you can minimize unnecessary data retrieval, saving resources and improving performance. Practical Example: Consider a subscription to contact.created. You may only need more information about the contact if business_idx equals 2. With FieldValues, you can avoid making redundant requests to fetch a ContactEntity unless this condition is met. This enhancement streamlines your workflow, ensuring that your applications run more efficiently by reducing the number of unnecessary requests. That's all for now We think these are some useful updates that you can start testing now in your development environments, and we looking forward to bring you more value to the API's in the near future! Till then, happy coding!
Tony YatesDeveloper Portal - 2.2 Release
Hello, SuperOffice Developers! We are ready with another release of SuperOffice Developer Portal. Adding a new widget for Partners ‘Publish status’ widget In this release, we’ve introduced a new Publish status widget , designed to provide partners with real-time visibility into the status of any app version. This includes details such as application configuration and partner profile information. The widget helps streamline the deployment workflow by making it easier to track version states at a glance. This enhancement is now available for all partner users. For the apps created before we had the developer portal you may have a version called "Imported". This version may not have been published to all our environments ( SOD, Stage and Production. ) For this reason you may see them shown in the new widget like this saying it's not started in SOD and/or Stage. If you notice these, please use the Contact us form you find under Support in the developer portal and notify u s , we will fix it for you. We would like to hear your feedback about this widget. Feel free to share your feedback on this. 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 PereraNew 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 FastingDeveloper 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 PereraDeveloper 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