.NET for Salesforce Release Notes

The following release notes detail the key improvements in each G4S release. More detail is included in the release download.


G4S Release Release 2.1.18129.1 (BREAKING CHANGES)

Note BREAKING CHANGE from cs29869 around licensing
[cs30668] G4S - Switch to log4net
[cs30413] ToolingServiceWrapper - Check for API access to sObjects ApexOrgWideCoverage and ApexCodeCoverageAggregate before querying.
[cs30374] CacheBase and EntityCache update to include optional ConstantKeyPrefix. Allows for two independent Caches to operator on the same generic base type.
[cs30373] SalesforceServiceBase: New method RecordTypeInfosById() to get record type Infos if they are defined for the sObject.
[cs30321] Add BulkEntityService to allow operations to be performed using the Bulk API
[cs30319] BREAKING CHANGE: Refactor BulkServiceWrapper BatchInfo properties
[cs30258] MetadataServiceWrapper - new GetMetadata(string sObjectName, string packageType) method to get SObjectMetadata for a defined packageType.
[cs30099] MetadataServiceWrapper: deploy aura components in packages.
[cs30072] Make SingleFilter public
[cs30052] ApexLogService - public methods to convert a debug log to a dataset while filtering the entires. NativeDebugLog to convert the DataSet back to the standard Debug log format.
[cs30051] DataSetConverter - Convert DataTable to CSV. Either directly to file or to StringBuilder.
[cs30017] Add optional allowExistingSObjectsWithoutId="true" to the binding configuration element to allow sObjects to be created with a null Id. Typically this isn't allowed as the ID is used to control insert/update operations and to identify relationship types. This setting can be used for more basic SOQL queries where the results won't be subsequently used for DML.
[cs30007] Added simple async bulk insert and update version of existing bulk methods, plus new unit tests for these methods
[cs29991] QueryResultPager - add IsAggregateQuery to identify results for an Aggregrate query with no records. The value is solely in the size.
[cs29976] Added option to create new record if lookup query returned no results
[cs29975] Updated SalesforceServiceFoundation class to only hide save errors for lists of entities, and not single entities, as this would be a breaking change for SubmitAction WFFM functionality. Updated Generic G4S save functionality to save multiple objects at once, save related objects and save converted leads
[cs29953] Wsdl2Apex: Handle case where the Schema TargetNamespace is missing
[cs29951] Crc32 - CalculateHash method from string
[cs29921] Support for Date fields as DataSource filters via SObjectField (which includes field type metadata)
[cs29869] BREAKING CHANGE: G4S licenses still using G4SLicense.lic will need a new G4SLicense.xml. The XML file has a different format for the keys. The license file path location is now an element under FuseIT.G4S.SalesforceConnector > licenseFileLocation.
[cs29895] Stopped the SalesforceCreateException and SalesforceUpsertException from being thrown when saving Salesforce object Ids back to the SaveResults list.
[cs29874] SalesforcePod: Added CS54
[cs29836] CacheBase - Don't log debug level messages for cache hits.
[cs29834] DataCache for DescribeSObjectResult switched to ConcurrentDictionary internally.
[cs29833] SalesforceChildRelationship, LookupRelationshipCollection, MasterDetailRelationshipCollection, SalesforceDescribeSObjectResult add SerializableAttribute
[cs29832] SalesforceServiceWrapper - Log exceptions when loading cached sObject descriptions.
[cs29830] SalesforcePod. Add AP5, CS66, CS67, CS70
[cs29818] SalesforcePod - Added NA44 and CS49
[cs29708] LogMessage enum - add VF_APEX_CALL_END
[cs29707] SalesforceSession If the serverUrl is undefined but the sessionID is known and can be resolved to the serverUrl populate it.
[cs29706] SalesforcePod: Map cs53 and cs71 pods
[cs29704] Wsdl2Apex: Map anySimpleType to AnyElementType
[cs29703] Wsdl2Apex: Handle multiple schema with duplicate TargetNamespace
[cs29574] SalesforceSession - add the NewSalesforceSession to signal when a new session is established automatically. This is used by the SalesforceSessionSingleton class with its existing event.
[cs29531] SalesforceSession - Update WebRequestWithAuthorizationHeader to include an optional parameter to retry with a new session on a failed request.
[cs29530] SalesforcePod - identify CS44
[cs29529] ApexLogService. Identify WF_TIME_TRIGGER and pair FLOW_CREATE_INTERVIEW_BEGIN/END logs.
[cs29528] MetadataServiceWrapper - DeploySingle method added to deploy an apex class by name, API version, and body.
[cs29527] S4S ReportData - Marked class as Obsolete due to lack of support when Lightning is enabled.
[cs29526] BayeuxClient - extend the waitFor method to identify waiting states where polling should continue.
[cs29447] ApexLogService. Pair CALLOUT_REQUEST and CALLOUT_RESPONSE events. Track the ticks on skipped logs and max debug log messages.
[cs29445] SalesforceDescribeSObjectResult - Expose MasterDetailRelationships and LookupRelationships as properties.
[cs29444] LookupRelationship and MasterDetailRelationship. Update ToString() formatting.
[cs29443] Batcher - correct logger type. May need to revisit due to logger name length.
[cs29442] SalesforcePod, include NA17, CS25, CS30
[cs29438] Update the Partner API to Spring '17 (v39.0)
[cs29437] Update Apex API to Spring '17 (v39.0)
[cs29389] DataSetConverter - Add SaveDataTableAsJson() to export the first DataTable to a JSON file.
[cs29383] ApexLogService - Include Time Elapsed in ticks as a Column. Static methods for working between log ticks and seconds.
[cs29378] ApexLogService - Pair Validation rules. Revert to pulling the Apex logs via the REST API if traceDownload.apexp isn't working.
[cs29369] Account - update generated standard fields
[cs29368] ApexLogService - Extend LogMessageAttribute to indicate if the LogMessage is the start or end message. Add VF_EVALUATE_FORMULA_BEGIN, VF_EVALUATE_FORMULA_END
[cs29362] Updated Tooling API to modified v38.0 WSDL after patches for unsupported types and Coverage lines.
[cs29348] T4 Code Generation - Only generate subclass for RecordTypes if that are applicable for that sObject type. In CleanName() when creating the enum values, handle the case where no characters in the value are permitted. Handle an sObject picklist that already has an "Unknown" entry. Remove the Database.com generation option. Include the current Salesforce API version in the code generation header.
[cs29343] Entity Code Generator - Exclude ; and : from the enum names. Append @ for invalid identifiers incase they are reserved keywords.
[cs29334] ReportService - Handle the tabularReport record count alternating between int and double.
[cs29333] SalesforceServiceWrapper - Expose DescribeSObjectsBatchSize for the upper limit on how many sObjects can be described in one call.


G4S Release Release 2.1.16348.1


[cs29303] SalesforcePod - includes NA39 and GS0
[cs29302] StatusServiceWrapper - Don't check for an existing known domain if the subdomain contains '-'
[cs29298] ApexMethod - When determining the dependencies - ignore null Request/Response Parameters.
[cs29297] ApexClass.Find() - verify that the apexClassName is not null.
[cs29294] T4 Entity Generator. Use CodeDomProvider to validate identifiers. Exclude commas from generated names.
[cs29282] Improve tracking of REST API callouts. ReportService - add PageCompleteTabularFactMap() method to sort and page tabular report results by a primary key column.
[cs29281] SalesforcePod: Map na42, cs24, cs50, cs62
[cs29263] Wsdl2Apex WebServiceInfo - Attempt to import ServiceDescriptions from local file paths
[cs29262] SoqlQuery - Detect if the query contains a SubQuery within the fields.
[cs29259] QueryResultPager - Track the Source SOQL Query
[cs29256] SalesforcePod - add NA43 and CS87
[cs29253] Extend ReportService to expose Analytics API. ListRecent() reports, Describe(), ExecuteSync(). Convert Tabular FactMap to DataSet.
[cs29246] Wsdl2Apex: Improve error messages with schema element is missing type information.
[cs29219] MetadataServiceWrapper - Support for deploying sObjects from Metadata
[cs29218] Expand ApexUpdateException to expose source Apex Class Name and line number if known.
[cs29216] ApexClassService - Add method GetClassBody to get Apex Class body via Class name.
[cs29215] ApexLogService - Add new LogMessage enums for Duplicate detection via the match engine.
[cs29214] FieldService.FieldsForObject use Cached ToolingAPI field metadata to improve performance.
[cs29213] If retrieving a non-nullable DateTime field but the value returned from Salesforce is null return DateTime.MinValue.
[cs29212] SalesforceSession - Add MaximumApiVersion static property to expose the current supported API version.
[cs29206] ToolingServiceWrapper add describeSObjectCached(). Use this in preference of describeSObject()
[cs29202] Expand SalesforcePod to support NA35, CS52, CS60, CS61, CS63. Extract pod Status via StatusServiceWrapper via GetCurrentStatus(). Lookup Pod location via GetLocationCode(). Expand SalesforcePod.ToString to include location and status details. Add IDEWorkspace wrapper class for Tooling API
[cs29140] Upgrade to Winter '17 API (v38.0)
[cs29137] Update the Tooling API to Winter '17 (v38.0)
[cs29135] ToolingAPI: Handle Exceptions from OnUpsertApexClassProgress event.
[cs29134] Update the Partner API to Winter '17 (v38.0)
[cs29133] Update the Metadata API to Winter '17 (v38.0)
[cs29132] Update the Apex API to Winter '17 (v38.0)
[cs29095] SalesforceServiceWrapper - Allow SOAP message tracing per Service class via the TraceSoapExtensionConfigured.
[cs29093] SalesforceField. Use the new "custom" property to identify custom fields.
[cs29090] WSDL2Apex: Improved error handling when importing schema xsds
[cs29080] Wsdl2Apex: ensure enum name starts with a letter. It is not allowed to start with the number in Apex.
[cs29079] Handle common SalesforceSettingsSection missing ConfigurationException and just DEBUG log it. Will use default values in this case.
[cs29078] SalesforceServiceFoundation - Improve UpdateEntities ArgumentOutOfRangeException message if no entities are passed in to update. Add DeleteEntity(Id) method.
[cs29077] FieldService - when checking if a field is updatable, check within the current Orgs namespace if defined.
[cs29076] MetadataServiceWrapper - Deployment support for triggers and installed packages
[cs29074] ToolingServiceWrapper - correct paging of describeSObjects to 100 records per batch. Cache DescribeSobject results via describeSObjectsCached()
[cs28987] DEBUG if the SalesforceSession Singleton is changed or cleared.
[cs28975] SalesforceDataSource - Add EntityFromQueryResultPager method to get a single record from a QueryResultPager.
[cs28967] Add new method ClearKeyPrefixCache() to the SalesforceSession.Binding to allow the KeyPrefix Cache to be cleared.
[cs28965] When caching the KeyPrefix to ObjectType mappings, include the Salesforce OrgId in the cache key. This will prevent conflicits for custom object key prefixes.
[cs28960] Change Logging Levels for "The XML string for this child" and "This node has attributes" from INFO to DEBUG
[cs28957] Handle Empty Salesforce API batches. E.g. Request to upsert 0 records.
[cs28933] Wsdl2Apex: Improve error handling if WSDL schema element is missing type attribute
[cs28910] ApexLogService. Add USER_INFO to LogMessage emum. When parsing a Log, create a Meta DataTable. Include info such as is the Max Log or Skipped Log entries are encountered.
[cs28891] Switch all APIs to use v37.0 of the APIs
[cs28890] Upgrade Metadata API to Summer '16 (v37.0)
[cs28888] Upgrade Apex API to Summer '16 (v37.0)
[cs28887] Upgrade Tooling API to Summer '16 (v37.0)
[cs28886] Upgrade Partner API to Summer '16 (v37.0)
[cs28872] Add new WF_FLOW_* LogMessages


G4S Release Release 2.1.16166.1


[28872] Add new WF_FLOW_* LogMessages [28858] SoslQuery: Support for executing a SOSL query [28857] SoqlQuery: Improve manual parsing of SOQL query to handling missing FROM clause [28855] MetadataServiceWrapper - fix packaging of page types [28853] ToolingServiceWrapper: Add ApexOrgWideCoverage() to get overall PercentCovered. Include triggers in ApexCodeCoverageAggregate() [28851] SalesforcePod: Map AP2, CS28, CS41, CS51, NA32 [28847] Add SOQL DataSource [28812] Rename WebSvcCalloutTestClass Methods and HttpMethods properties to have Callout prefix to avoid conflict with base clas... [28804] SalesforcePod - Map "29" to cs19 and "8A" to cs45 [28767] Changed Framework to 4.5.1 .NET [28723] Metadata Service - Add support for deploying Visualforce pages


G4S Release Release 2.1.16125.1


64-bit G4S Build


G4S Release Release 2.1.16097.1 (BREAKING CHANGES)


[cs28723] Metadata Service - Add support for deploying Visualforce pages.
[cs28722] Tooling API Apex Class Deployment, include details of the deployment in any Exception that occurs.
[cs28709] Upgrade the Apex API to v36.0 Spring '16
[cs28708] Update the Metadata API to v36.0 Spring 16
[cs28707] Update the Tooling API to v36.0 Spring `16
[cs28700] Update Partner API to v36.0 Spring '16
[cs28694] Upgrade HtmlAgilityPack to v1.4.6 for .NET 4.5 compatibility. SFDC Explorer: Improve DataExport Exception handling
[cs28677] Allow deployment of individual ApexComponent files
[cs28655] SalesforceServiceWrapper - wrap the SOSL search() method to handle session timeout and auditing.
[cs28653] Convert Salesforce UNSUPPORTED_CLIENT Exception into SalesforceUnsupportedClientException. Extend exception message with support URL for handling TLS 1.0 being disabled.
[cs28615] BREAKING CHANGE: Upgrade to .NET 4.5 TargetFramework from .NET 3.5 to meet Salesforce requirements to use TLS1.1 or higher. TLS1.0 support is being phased out. Salesforce Update "Require TLS 1.1 or higher for HTTPS connections". Added "securityProtocols" section of config to allow setup of supported Tls protocols. log4net upgraded to HtmlAgilityPack upgraded to 1.4.9. .Config update to v4.0 sku=.NETFramework,Version=v4.5.1
[cs28610] SalesforceServiceBase - validate GetByFieldEquals()parameters are not null or empty.
[cs28605] SalesforcePod - add NA30 mapping to pod identifier 36.
[cs28600] Wsdl2Apex: Detect potential WSDL 1.1 structure issues
[cs28597] Override ToolingAPI Metadata.ToString() to write out reflected property values.
[cs28590] SalesforceSession. Include the pod identifier in ToString(). Log if the session is created in evaluation mode.
[cs28589] SalesforceSettingsSection. Remove Debug message "config section not specified. Using defaults.". It is common to use the default config settings, making this DEBUG message appear frequently. Removed to reduce the noise when setting up a new session.
[cs28582] ToolingDynamicQuery add new keyword to the RunQuery method
[cs28581] Update ApexLog parsing to allow for Spring '16 date formats
[cs28520] SalesforceSession - Keep the UserInfo that is returned by the Login call, reducing the API call count by one when establishing a session. Override ToString to include basic session details.
[cs28517] SalesforceField - Add IsEncryptedField property to identify encryped strings that are only visible with ViewEncrypedData. SalesforceMembershipProviderBase - If the configured password field is encrypeted, verify that the current Salesforce API user can View Encypted Data.
[cs28516] SalesforcePod - Add mapping from NA31 as 37.
[cs28512] Correct masking of SessionId in logging.
[cs28509] SalesforceServiceWrapper - When a Partner API Exception occurs, include the apiMethodName and additionalMessage in the Exception Data collection. E.g. For a query() call, this will include the SOQL query being executed.
[cs28485] EntityBase - When attempting to resolve a related objects Id, first check if the relationship field name ends with __r. If so, try and pull the ID from the source sObject using the __c suffix. Check if the fields are available before attempting to access them.
[cs28484] FieldService - Don't log for fields that aren't avaiable outside of a DEBUG build.
[cs28436] Remove the "-api" sub domain suffix, it is no longer required. Add a mapping for the CS51 sandbox.
[cs28395] SalesforceField - New field ParentSObjectType to track which sObject it orginated from.
[cs28386] FieldService.FieldFromObject() Use existing ResolveReferenceType() method to find the type referenced by the fieldname.
[cs28369] Added SalesforcePod mapping for AP4
[cs28342] Wsdl2Apex: Improve handling for Attributes that aren't instances of XmlSchemeAttribute.
[cs28338] With T4 Template output for an sObject entity, include code comments for Enum values.
[cs28335] Salesforce EntityBase - When updating an sObject, ensure that any field in fieldsToNull is accessible by the current API user and that it isn't a reference sObject.
[cs28333] SalesforcePod: Register identifiers for NA26 and CS80
[cs28310] After retrieving a static FieldService instance, verify that it has the expected Org and User ID. Plus that is for the expected object type. If it isn't, remove the stored value and create from scratch.


G4S Release Release 2.1.15323.1


[cs28138] Wsdl2Apex: Use a dedicated AddMember method on ApexClass to check for an existing member with the same name.
[cs28139] SalesforceServiceWrapper. Improved handling for exceptions in describeSObjectsCached()
[cs28140] SalesforceSession. Expose OrganizationName via Metadata API describe.
[cs28156] Tooling API support for cultures that use , instead of . as the decimal seperator.
[cs28190] Update the Partner API to Winter 16 v35.0
[cs28195] Update the Tooling, Apex, and Metadata APIs to Winter '16. v35.0
[cs28213] When storing sObjects in the EntityCache, prefix the key with the name of the field that holds the key value. This avoids conflicts when two different fields contain the same value.
[cs28231] Added generated classes for EventLogFile
[cs28273] Salesforce is removing support for API access via www.salesforce.com for production and developer orgs. Switch to login.salesforce.com https://fuseit.zendesk.com/entries/107778146-Critical-update-for-S4S-the-Sitecore-to-Salesforce-Integration-from-FuseIT


G4S Release Release 2.1.15279.1


[cs28043] ApexTestQueueItem ExtendedStatusFailed for the number of failed test methods.
[cs28110] Throw UnknownSalesforceFieldException when field can't be accessed in the Updateable check.
[cs28113] Update to the FieldService to ensure separation of metadata between multiple sessions.


G4S Release Release 2.1.15250.1


[cs26741] Tooling API: Wrap the executeAnonymous method to allow Logging levels to be defined.
[cs26800] Change the logging level from Info to debug when there are no proxy settings.
[cs26801] Debug level logging in SalesforceSessionSingleton around how the session was constructed.
[cs26802] Allow the initial Salesforce Partner API URL to be passed in the constructor to the SalesforceServiceWrapper.
[cs26805] Handle formatting of large CALLOUT_RESPONSE that was appearing as blank in the Apex Log when it didn't contain any Line ...
[cs26825] Allow CacheBase to work with Structs
[cs26947] Expand domain support for any sub domain of .force.com. Previously would only accept visual.force.com
[cs27000] ToolingDynamicQuery Use a SOQLQuery to represent the query.
[cs27055] Handle SOQL generation for Date Formula, such as TODAY and LAST_WEEK
[cs27058] Update the Partner API to v32.0 (Winter 15)
[cs27066] Update the Tooling API to v32.0 for Winter 15
[cs27067] Update the APEX Web Service to v32.0 for Winter 15
[cs27151] SalesforceDataSource.EntitysFromQueryResult (QueryResult queryResult) now takes an optional boolean parameter returnAl...
[cs27188] Improve Apex Log parsing where the log contains escaped '\' characters as |
[cs27202] Added SalesforceSeviceFoundation class (extracted from SalesforceServiceBase) and DiaparateSalesforce class. SalesforceS...
[cs27203] Added hypen and slash in String litral regular expression for SOQL query parser. Fixed SoqlQuery class to remove extra s...
[cs27268] When parsing SOQL handle the optional AS keyword in the FROM clause alias.
[cs27277] ToolingServiceWrapper: Optionally define the logLevels to capture with a trace. Remove TraceFlag records that expired be...
[cs27278] sObject - Add non-generic version of ToInstance that uses a Type parameter.
[cs27290] SoqlQuery allow the Limit clause to be updated or removed.
[cs27350] sObject ToInstance check for Anonymous Types before using subclass of EntityBase.
[cs27399] Modified GetSubQuery to return all available sub query records
[cs27462] An sObject Date field won't have a Time component when queried via the API. Add the required ISO8601 suffix so that is s...
[cs27463] Update the Partner API to Spring 15. API version 33.0.
[cs27464] Update the Apex API to Spring 15. v33.0
[cs27468] Upgrade Metadata API to Spring 15. API v33.0
[cs27469] Upgrade the Tooling API to Spring 15. Version 33.0
[cs27470] Upgrade to Spring 15 v33.0 APIs. Expose ApiRequestLimitInfo for the most recent API Request limits.
[cs27472] Add option to Remove fields from InternalFields. This is useful when updating a record with a field that can't be update...
[cs27475] Add support for Order By to SOQL Expression
[cs27476] SalesforceDataSource Add non-generic EntitysFromQueryResult and EntitysFromQueryResultPager methods for when the sObject...
[cs27478] Add ISalesforceService interface for Salesforce Service classes to implement. SalesforceServiceFoundation. Add ValidEnti...
[cs27557] Debug Log when the Caches are cleared for a user using ClearCacheForUser(userId)
[cs27560] When caching DescribeSObjectResult meta data check to see if the type is already cached for the given user. Log an error...
[cs27567] Add ability to deploy destructive changes from single xml file. Creates required package.xml and zips.
[cs27568] ToolingService - New ApexCodeCoverageAggregateForClass method to get the CodeCoverage for a given ApexClass. Improve sup...
[cs27569] Apex Log - Add WF_EMAIL_SENT, WF_EMAIL_ALERT Improve parsing of execution duration.
[cs27571] Avoid using Service.GetByEntityId(Id entityId) and GetByEntityId(Id entityId, bool retryOnInvalidField) methods if possi...
[cs27572] ApexCodeCoverageAggregate Add convenience properties for accessing Name, FormattedLinesCoverage, NumLinesTotal, and Perc...
[cs27597] When caching sObject metadata check for conflicts in field names, relationship names, and child relationship names.
[cs27606] ApexLogService: Add missing LogMessages. Make Attribute Reciprocal optional. Internal method to get sorted list of LogMe...
[cs27614] Fix: ContactService.GetByEmail. Use the defined sObjectFields collection to limit the returned fields.
[cs27629] SoqlQuery: Use common parsing of SOQL when adding or removing fields. Raise a SoqlParseException if the ObjectType can't...
[cs27631] SoqlParseException. Additional contstructor to capture the underlying SOQL
[cs27632] SoqlQuery: Improve parsing support for Date Literals in lower case. AddWhereClauseFilter and AddOrderBy both require a p...
[cs27633] SoqlQuery: Improve parsing and evaluation for multiple Order by Clauses. Includes nulls first/last.
[cs27635] DataExportConsole: add zeroBasedIndexing setting to app.confing.
[cs27636] Extend ApexTestQueueItem with a property indicating if there was a compile error.
[cs27637] Only set EntityBase Ids if the ID is defined in the underlying sObject. When creating the sObject for update clone the ...
[cs27660] Auto UDF Mapping MultiLineText support.
[cs27718] Raise API events from the Metadata API wrapper.
[cs27719] Convert from Metadata and Tooling API types to eqv. Partner API types.
[cs27720] Make the SObjectField constructor public
[cs27721] Support 2 character SalesforcePod instances.
[cs27722] Tooling API UpdateApexTrigger to update ApexTrigger.
[cs27723] ApexUpdateException. Handle missing saveResult and/or deployDetails.
[cs27724] CheckMethodStatus can optionally be focused on a single ApexClassId
[cs27726] Salesforce Session. Expose the Sandbox name, if applicable. Use a single instance of the MetadataServiceWrapper.
[cs27731] CometD: Expose the header collection so that the Session ID can be verified.
[cs27744] Metadata API: Handle Apex Class names > 40 characters by truncating them before appending the RunSingleUnitTest suffix
[cs27746] Upgrade to Partner API v34.0 Summer 15.
[cs27748] Upgrade Tooling API to v34.0 Summer 15
[cs27749] Update the Apex API to v34.0 Summer 15
[cs27750] Update the Metadata API to v34.0
[cs27753] Update all components to use v34.0 of the APIs.
[cs27756] Support for running individual test methods. Both sync and async
[cs27758] Run Anonymous Apex in a Testing context
[cs27759] Improved EnqueueTestsMethods to run isolated test methods. Allow Metadata deploy if checkOnly is true when the connectio...
[cs27761] Make the EntityFactory public. The RegisterType method can be used to override the EntityBase type that gets created for...
[cs27871] Determine if a SalesforceSession is to a Sandbox based on the Organization.IsSandbox field. This will work when using th...
[cs27873] SalesforceServceBase - reject objectType parameter with leading or trailing white-space characters
[cs27875] Setting invariant culture when parsing double and float values.
[cs27896] Added ability to remove single entities from the cache.
[cs28035] SalesforceSession: Handle logins to community sites with extra URL segment. Improve parsing of Sandbox Name.
[cs28040] ApexTestRunning. When enqueuing all test cases, allow restriction to just the current namespace.
[cs28042] ApexClass. New FullName property to format in NamespacePrefix
[cs28043] ApexTestQueueItem ExtendedStatusFailed for the number of failed test methods.


G4S Release Release 2.1.14244.1


[cs26343] QueryResultPager: returns an empty query result for ranges out of the size
[cs26344] SalesforceServiceBase.ValidEntityID: make object type comparison case insensitive
[cs26430] Add support for Enhanced Trialforce Branding custom login domains ending in .cloudforce.com
[cs25683] Add SOQL parsing support for three character Aggregate Function aliases.
[cs25364] Add Enum values for LogMessage WF_ASSIGN, WF_RESPONSE_NOTIFY, WF_RULE_ENTRY_ORDER
[cs25753] Wsdl Parsing and generation support
[cs25866] Delete any existing TraceFlag records when capturing logging for a Salesforce User.
[cs25891] Support for xsd:extension base=tns:Drop in WSDL, Search for method to filter out, Included comment with excluded/include method names, Sort by Apex method name in gridView, Csv filter to either select or exclude methods.
[cs25941] Support to xsd:import element, syntax highlighting for generated Apex Classes, Warning comments for skipping xsd:any and xsd:attribute elements in WSDL2Apex Control
[cs26086] Updated Partner WSDL to v30.0 for Spring 14
[cs26087] Update ToolingAPI to v30.0 for Spring 14
[cs26088] Update the MetaData API to v30.0 for Spring 14
[cs26089] Update the Apex WSDL to v30.0 for Spring 14
[cs26122] Added new Sandbox license key gen and check, extended sandox eval to 2 years
[cs26414] Track API Callout if retrying after reestablishing Session
[cs26478] Track the ApexLogService.LogMessage category and level via the LogMessageAttribute.
[cs26486] Update the Partner API to v31.0 for Summer 14
[cs26487] Update the Tooling API to version 31.0 for Summer 14
[cs26488] Update the Metadata API to version 31.0 for Summer 14
[cs26489] Update the Apex API to version 31.0 for Summer 14
[cs26490] Use v31.0 as the Supported API version. Summer 14
[cs26505] Added option to configure the buffer size for dataExport in config file.
[cs26680] Tooling API. Add UpsertApexClasses method.


G4S Release Release 2.1.14043.7


{cs25386] ApexClassService - new methods to get ApexClass Body and List of classes with test cases. Add addtional WF_RULE_ LogMessage enum values ToolingService method to CreateTraceFlag to enable log capture + Get Code Coverage for ApexClass by Id.
[cs25492] Exclude the ApexClass Body when retrieving the ApexTestResult list of a JobId.
[cs25495] New SalesforceSession.WebRequestWithSessionCookie method to send a WebRequest to the standard Salesforce UI as a users browser would. Can be used for screenscraping and accessing data not exposed via the APIs.
[cs25631] Upgrade to HtmlAgilityPack.dll v1.4.6 from v1.4.0
[cs25663] Build Release G4S64|x64 to .NET 4.5 from 3.5. Other releases are still 3.5


G4S Release 1.5.13186.1, 1.6.13186.1 and 1.7.13189.3


[cs24586] Update the Tooling API to version 28.0. Created the ToolingServiceWrapper to wrap the SforceServiceService that is generated from the Tooling API WSDL.
[cs24571] Update Apex WebService WSDL to v28.0
[cs24570] Update MetaData API to v28.0
[cs24564] Update to Partner API v28.0


G4S Release 1.5.13165.1 (BREAKING CHANGES)


[cs23462] DataSource.SingleFilter - Fixed a bug where returned string was invalid if passed duplicate ids.
[cs23598] In the T4 templates of entities correctly resolve the relationship name where it may be undefined in the metadata.
[cs23786] CacheBase - Stripped out a prefix on the get all method, caused a bug where prefix was added twice.
[cs23939] Handle failue to read SalesforceSettingsSection from config file. Revert to defaults.
[cs23985] Fix recursion bug with Soql.Operator.OperatorFor.
[cs24168] Update the DataCache for the meta data description dictionary if it is already present in the cache.
[cs24401] DataSource - Fix encoding of CSV data that contains inner double quote characters.
[cs23440] Extend the ApiCalloutEventArgs to include the callout duration TimeSpan and the Cumulative API Callout Count.
[cs23467] Add IsEvaludation and EvaluationExpiryDate properties to SalesforceSession.
[cs23682] If the SalesforceSession is successfully reestablished on encountering an invalid SessionId only log an Info level message rather than an Error.
[cs23684] Add support for the ToolingAPI. Upgrade API to version 27.0
[cs23773] Support parsing SOQL with whitespace in string literals.
[cs23791] Add the abiltiy to restore the casing of a Salesforce Id if it is 18 characters long.
[cs23801] FuseITSalesforceLogin.ascx Layout - Example of logging a user in without the password.
[cs23824] Wrap the Metadata API to provide additional functionality.
[cs23827] Add MetadataServiceWrapper and SObjectMetadata classes. Reference to Ionic.Zip.dll is now required to extract Metadata Zip files.
[cs23829] Add support for getting and setting double fields via the InternalFields.
[cs23830] [cs23831] Don't force an AggregateResult sObject to have the Id field.
[cs23833] Use the Metadata wrapper to retrieve SObjectMetaData for a sObject by name. Automated unpacking from the Zip. [cs23838] Add new SalesforcePod class that can be used to find the instance based on the OrgId or SessionId. Can be used to determine if you are working with a Sandbox or if the ServerURL isn't available.
[cs23871] Prevent the SalesforceExceptionFactory from attempting to convert an existing SalesforceException. It should only covert a SoapException.
[cs23875] On sObject Upsert, default the externalIdField to "Id" if it isn't set. When upserting, the presence of the Id field is the only way to know if you are dealing with an existing object or not.
[cs24402] Added method - SObjectMetadata.FindValidationRuleNames() - Retrieve a list of all the validation rule names via the meta data api.
[cs24403] ApexLogService - Improve parsing of the Timestamp from the Apex logs.
[cs24411] Add SalesforceSettingsSection configuration option to set the CallOptions.defaultNamespace. "A string that identifies a developer namespace prefix. Use this field to resolve field names in managed packages without having to fully specify the fieldName everywhere."
[cs24412] Allow the CallOptions Client Id and defaultNamespace to be specified via a connection string.
[cs24413] Allow Salesforce Connection strings to be marked as ReadOnly. This will cause a ReadOnlyException if a web method is called that attempts to alter or insert records to Salesforce.


G4S Release 1.5.2013.2 (BREAKING CHANGES)


[cs23343] BREAKING - G4S license keys are removed from the G4S.config and are now in an xml file G4SLicense.xml.
[cs23302] & [cs23303] Added DataSource.AddDataSourceFilter() for a string[] data filter
[cs23413] Log a DEBUG message starting with "API:" when any Partner API callouts are made. 


G4S Release 1.5.2012.42 (BREAKING CHANGES)


[cs23164] Fixed a bug caused when querying join reports
[cs23202] Fixed a bug to set the correct field mapping name.
[cs23238] Added support for users to map Last Password Change Date to salesforce
[cs23206] SalesforceServiceBase.UpsertEntities now has inbuilt support for batching collections larger than 200 sObjects, Changed the SalesforceSession.Binding BatchProgress events to use the new BatchProcessEventArgs, Added SalesforceSession.Binding.OnApiCallout to track API usage, Added QueryTimingEventArgs to track timing for running SOQL queries
[cs23205] Add a protected constructor to SalesforceField for Binary Serialisation support.
[cs23181] Update from the Apex v23.0 to v26.0 WSDL, BREAKING - Namespace changed from SalesforceConnector.SalesforceApex230 to SalesforceConnector.SalesforceApex. Update from the Metadata v24.0 to v26.0 WSDL
[cs23175] In Apex Run Test Results show failed tests first and in red. Allow multirow display for showing stack traces and errors.
[cs23173] Only add an Apex log filter event if it isn't already being filtered.
[cs23172] In the login control only use the selected connection string name if the selected tab is for connection string.
[cs23171] Added INSUFFICIENT_ACCESS to SalesforceExceptionCode enum.
[cs23168] Support for setting the logging levels per category when running anonymous apex.
[cs23167] Support for setting the log categories for ApexService.executeAnonymous()


G4S Release 1.5.2012.34


[cs23111] Fixed bug where additional filters weren't being applied.


G4S Release 1.5.2012.33


[cs23101] Increased validation and logging


G4S Release 1.5.2012.31


[cs23048] If exception occurs in ApexTestRunner.RunTests() throw SalesforceException rather than SoapException.
[cs23051] SalesforceServiceBase - Fixed upsert method when passing in an external ID.
[cs22967] Added support for the INVALID_QUERY_LOCATOR ExceptionCode.
[cs22974] Added Services.Metadata.AccountMetadataService [cs22975] ApexTestRunner supports LogInfo and LogCategoryLevel in preference to the deprecated LogType. Allows for finer tune logging levels.
[cs22987] Add strongly type LoggingEvent classes. Keep NewLine characters for multiline log messages.
[cs22997] Support for parsing "MAXIMUM DEBUG LOG SIZE REACHED" message
[cs23036] Added specific SalesforceInvalidQueryLocatorException for INVALID_QUERY_LOCATOR SalesforceExceptionCode.
[cs23043] Exposed RunTestsResult total run time as a TimeSpan.
[cs23052] Added additional error checking to EntityBase.
[cs23054] SalesforceServiceWrapper - added argument validation for retrieve().
[cs23066] Added argument validation for retrieve() to ensure the fieldList, sObjectType, and ids are defined.
[cs23071] Added properties to SalesforceSession for the SalesforceOrganizationName, SalesforceUserName, SalesforceUserFullName, and UserInfo (GetUserInfoResult).
[cs23073] T4 Generated sObject Entity relationship properties can now be set to allow Foreign Key Resolution via external Ids when creating new entities.
[cs23073] New SalesforceServiceBase.UpsertEntity() method.
[cs23073] New SalesforceCreateException and SalesforceUpsertException are thrown if errors encountered with an Upsert or Save operation.
[cs23079] T4 entity template update to allow setting internal entity relationship objects. Allows setting the FK on upsert via an external id.
[cs23079] Don't output the RecordTypes in the entity template if they aren't available for the API user.
[cs23079] Excluded '.' from C# names to resolve T4 generation issues.
[cs23080] SoqlQuery and now append additional where clause filters via AddWhereClauseFilter().


G4S Release 1.5.2012.29


[cs22956] Fixed bug caused by large numbers of custom fields in the edit screen for users.
[cs22926] Resolve issue where there was only a single CodeCoverageResult.
[cs22925] Add the DesignerSerializationVisibility.Content attribute to the fields collection.
[cs22924] Add ExpandableObjectConverter for SalesforceFieldConverter to improve display in Property Browser.
[cs22923] Handle CodeCoveragePercentage calculation when there are no lines covered.


G4S Release 1.5.2012.24


[cs22634] Add new GetSoqlSubQuery() method that won't add Id fields to the SOQL query. This is required for sub queries that don't include aggregate functions.
[cs22614] Check for the PasswordFieldName and IsEncryptedFieldName in the InternalFields before accessing them in ValidateUser().


G4S Release 1.5.2012.21


[cs22385] Fix for parsing Unknown Salesforce Exception Codes and fix for NativePageSize when previous query result was empty.
[cs22416] Resolve issue with Id equality operator and null comparison.
[cs22292] Added ApexLogService.GetApexLog(id) method to retrieve complete log by Id.
[cs22315] Added DateTime SoqlFilter support for SalesforceDataSource
[cs22374] Added ApexLogService.ApexLogToDataSet(string) method to do basic Log to DataSet parsing.
[cs22417] Log warning in EntitysFromQueryResultPager if the sobject ID field is not populated.
[cs22418] Added MALFORMED_QUERY (an invalid query string specified e.g. query string longer than 10,000 chars) to the SalesforceExceptionCode enum.
[cs22419] Log a debug message if RetryOnInvalidSession is not configured and Salesforce has returned an InvalidSession error.
[cs22476] Create the SalesforcePasswordExpiredException when the Salesforce Password has expired
[cs22477] Split the CompositeFilter into LogicalConjunctionFilter (AND) and LogicalDisjunctionFilter (OR).
[cs22478] Added Admin ApexTestRunner class to run Apex Test cases via the API.
[cs22479] Modify T4 templates to ensure the Referenced sobject types are registered with the EntityFactory when using properties.
[cs22502] Added SetFields() method to explicitly set the SOQL select fields in SoqlQuery.
[cs22534] Added DataSource Operator support for IN and NOT IN filters. The Operator constructor is now private. Instances can be created with Operator.OperatorFor().


G4S Release 1.5.2012.9


[cs21745] Allow Salesforce Services to be created where keyPrefix can't be determined directly via Partner API. In these cases it won't be possible to find the sObject type from an Id.


G4S Release 1.5.2012.6


[cs21546] EntityCache now optionally specifies if key is case sensitive. If not case sensitive it will be converted to lowercase. ContactCache constructor now takes a parameter that indicates if the key field is case sensitive.
[cs21546] SalesforceMembershipProvider: Searches for Contacts by the UserNameField now takes into account if the key field is case sensitive as indicated by the G4S.config G4S.UniqueKeyCaseSensitiveProperty setting (Defaults to false).


G4S Release 1.5.2012.5


[cs21518] Increase CacheItemPriority on primary cache keys to NotRemovable. If these keys are automatically flushed from the cache all the dependent records are also removed (by design). Increase debug level logging from Security Providers and Caching.
[cs21457] Increase DEBUG level logging in the Caches and Providers to assist with debugging.


G4S Release 1.5.2012.4


[cs21172] Improved equality operators in Id class when dealing with null and other object types.
[cs21125] Added SalesforceServiceBase EntitiesFromQueryResultPager methods to retrieve entire result set (previously limited to a maximum of 2000 records depending on the number of fields requested). SalesforceDataSource.QueryEntites method now returns all the matching entities by paging through the query results (previously returned the first query result). SalesforceServiceBase GetAll method now uses the updated SalesforceDataSource methods to return all entities.
[cs21145] Added GetSubQuery method to InternalFields to return the entire sObject from a SOQL subquery.
[cs21168] Changed QueryResultPager method to return QueryResult with queryLocator if page size is an exact match. No longer parses an empty SOQL query.
[cs21329] Updated Salesforce Partner API to version 24.0. Updated Salesforce Metadata API to version 24.0.
[cs21354] Included the Salesforce OrganizationType in info logging.
[cs21403] In relation to the DataCache, when adding a new DescribeGlobalResult to the cache, clear out any existing entry. In the SalesforceServiceWrapper, allow batch update of records. In Entities, expose base64 encoded data as byte[] in .NET. Added Direct SOQL support to SalesforceServiceBase.
[cs21236] Added System.Web.UI.WebControls.LoginView to typesThatShouldNotBeExpanded.


G4S Release 1.5.2011.963


[cs20539] Modified eval date method to use same date format as countries like US.
[cs20662] Make the field search case insensitive.
[cs20793] Handle missing settings.
[cs20966] Add SOQL parsing support for additional constructs such as GROUP BY, HAVING, LIMIT, WITH.
[cs20631] Added SalesforceConnector Services reference for G4S build.
[cs20636] Updated reference to SalesforceServiceWrapper.
[cs20688] For generic data source add WHERE clause as a filter in the constructor.
[cs20785] Removed error message if SalesforceEnvironment is missing from connection string.
[cs20842] Add more logging about how the Salesforce Session is set.
[cs20981] Expose APEX web services from the SalesforceSession.GetApexService().


G4S Release 1.5.2011.959


[cs20121] Fix issue where the LastLoginDateFieldDefined property wasn't returning correctly.
[cs20244] Move the parsing of the SOQL into the SoqlQuery class. Fixed WHERE clause issue.
[cs19945] Update to Salesforce Package 1.11 to ensure Testing Contacts have a valid Country Field value. Some Salesforce Orgs are validating these - values.
[cs20004] Add ExistsByFieldEquals method.
[cs20252] Add new EnumHelper helper methods to get the values and a dictionary of values and descriptions.


G4S Release 1.5.2011.950


[cs19843] Reduce logging when testing if an ID is case sensitive or not.
[cs19869] Allow the SalesforceSessionSingleton instance to be cleared.
[cs19891] New Salesforce Enterprise Edition package to install 1.9. Fix issue where the Contact.Name may not be unique within the Org.
[cs19862] Add the StringBuilderAppender for capturing log messages at runtime.
[cs19868] Add support for the CaseSensitiveID.
[cs19870] Add a DataExportCollector to pull down Weekly Data Exports automatically.
[cs19872] Add a T4 template control to generate Salesforce objects for G4S Diagnostics.
[cs19874] Update the FieldService.ResultsToDataSet method to take a SalesforceSession and optionally fetch the remaing query results.
[cs19875] Remove the DataSet conversion functionality from the Services.FieldService to the DataSource.DataSetConverter class.
[cs19892] Upgrade to package 1.10 to ensure test cases work when the Custom Setting is set to email.


G4S Release 1.5.2011.945


[cs19648] Handle failure to load provider.
[cs19700] Master Details relationships must have a Child Relationship
[cs19631] Move the SoqlQuery class into the Soql namespace.
[cs19646] Add new Properties to Security Providers to give a basic indication of the Licensing Status.
[cs19649] Add example log4net appender to send error emails.
[cs19693] Add PolymorphicKeyReference property to base Relationship class so that it can be used for Lookups in addition to MasterDetailRelationships.
[cs19697] Add a new DataSource method, RunQueryExists(). Run a SOQL query and check if at least one matching record exists.
[cs19740] Allow establishment of a SalesforceSession using the sessionId and serverUrl.
[cs19747] Switch from ISubmit to ISaveAction. Allow for the creation of new Contacts and Leads. Add a SalesforceSessionSingleton implementation for working with the API session.
[cs19773] Move the parsing of the connection string to the LoginDetails. Raise an event from the SalesforceSessionSingleton when a new Salesforce session is set.
[cs19779] Pre-compiled templates to generate G4S entities.
[cs19781] Take the output of the pre-processed T4 template for the core Salesforce objects (no custom fields or objects) and merge it back into G4S. All exposed default objects and fields will have classes now.
[cs19812] Add support for proxy credentials in the ConnectionString/LoginDetails for Salesforce Soap connections.


G4S Release 1.5.2011.941


[cs19521] Resolve parameters issue in SalesforceDataSource.GetPager method.
[cs19562] Add GetAll() method to EntityCache to retrieve all cached entities of that type. Add additional caching examples.


G4S Release 1.5.2011.917


[cs19354] EntityCache constructor to support get by id with defined cache duration.
[cs19372] New methods for MasterDetail Lookup relationships for sObjectType. Methods in FieldService now return SalesforceFields rather than the Partner. API Field object. Calls to these methods will need to be updated.
[cs19384] Resolve issue with Master-Child Relationships through Partner API.


G4S Release 1.5.2011.914


[cs19250] CacheBase.Contains no longer throws ArgumentNullException if no cacheKey.
[cs19348] Resolved bug when parsing a Salesforce number field to an integer. In some cases the Salesforce Partner API would return the value with a decimal point even though the precision was 0. For example, a value of 5 in a Salesforce Number(10,0) field would return as "5.0". This caused the field extraction to fail.
[cs19268] Add FieldService.HasField(string fieldName) method.
[cs19278] Add support for the ID EmptyKey, which is used to indicate an empty reference in a Data Export.
[cs19285] SalesforceServiceWrapper.ObjectTypeFromId(Id) will now return null when the type for the ID can't be determined. Previously an ApplicationException error was thrown.
[cs19326] Restrict fields returned when retrieving a single Contact. In the membership provider, don't consume all provider keys (throwing exceptions). Just return null as another provider may be able to match the key.
[cs19349] Switch from Hashtables to Dictionaries for caching. Wrap Salesforce Field metadata in the SalesforceField object.
[cs19352] Add optional support to expire a Contacts Membership login using data from Salesforce. Contacts can optionally be locked out and have the approval status toggled. Add support for setting nullable floats, ints and Id field values.
[cs19353] Create EntityCache class for generic entity caching by a given key or the Id. Move cache keys into the constructors.


G4S Release 1.5.2011.912


[cs19239] Restrict the fields retrieved by the G4S SalesforceMembershipProvider to be the minimal required. This should help address issues where other unrelated fields are being added and removed in production while G4S is running with cached data. Fix bug when searching Membership provider by email.
[cs19240] SalesforceServiceBase.DeleteEntities() Allow for bulk delete of entities in addition to current ID only support. SalesforceServiceBase.GetAll() overload to only pull specific fields.
[cs19241] If a query or retrieve API call to Salesforce fails due an invalid field in the request and the G4S/G4S call didn't specify the field clear the cached Salesforce schema data and retry the API call. This will provide some tolerance for schema changes occurring live in Salesforce when G4S is running.
[cs19222] Add a new class to represent a Salesforce ID. Allow for SOQL queries against this new class. E.g. Get by strongly typed ID field. Update the T4 generation templates to output the fields for an object using the required type. Allow for Select queries using fields defined for an sObject. Move exceptions into a folder. Add direct support for Opportunities in the Entities namespace.
[cs19224] T4 templates now produce separate files per class and entity.
[cs19243] Return null when attempting to retrieve a string field that doesn't exist from a sObject. Previously empty string.
[cs19246] Handle REQUEST_LIMIT_EXCEEDED exception when establishing session.


G4S Release 1.5.2011.0906


[cs19174] Resolved issue with re-establishing Salesforce session from the connection string when it has expired due to inactivity.
[cs18626] Updated Salesforce Metadata API to 21.0 version.
[cs18571] Generic service updates. Improved field caching per object type. Allow the DataCache to be persisted out. Useful for Winforms. Increase the license period for sandbox users to 365 days.
Join our next S4S webinar!

See the power of S4S in action.

Registrations are now open for
27 October 2020

  • PDT 12:00 pm - 1:00 pm
  • CDT 2:00 pm - 3:00 pm
  • EDT 3:00 pm - 4:00 pm
  • GMT 7:00 pm - 8:00 pm
  • CEST 8:00 pm - 9:00 pm
  • Contact us for other times

Time in Nelson, New Zealand

Our Saturday is Friday in the US

Compare New Zealand times with:

Ready to join the integration revolution?
Get started and enjoy the benefits sooner