.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 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.