Releases: StevenMMortimer/salesforcer
salesforcer 1.0.2
salesforcer 1.0.2
Dependencies
-
Increment the package's default Salesforce API version to 61.0 (Summer '24).
-
Remove deprecation warning for basic authentication (password and
security token) because many users have found that it's still possible to
use for programmatic (API-based) access even if their org requires users to
log in via multi-factor authentication. (#128)
Features
- Add two new datetime formats that will automatically be parsed if they appear
in the query recordset"%m-%d-%Y %H:%M"
and"%d-%m-%Y %H:%M"
. (#127)
Bug fixes
-
Fix bug that caused Bulk 1.0 queries using the PKChunking option to error
out because the query info returned a vector of IDs instead of one which was
expected by thesf_batch_status_bulk()
function. (#124) -
Explicitly specify the column name repair method for all
as_tibble()
and
as_tibble_row()
function calls because this could be causing issues when
parsing and binding query recordsets. (#124)
salesforcer 1.0.1
Dependencies
- Increase the package's default Salesforce API version to 54.0 (Spring '22)
- Added a deprecation warning that using basic authentication (password and
security token) will no longer work since Salesforce announced that all
customers will be migrated to MFA beginning February 1st, 2022
(link). Many thanks to @klaw2 for highlighting in #113. - Remove deprecated use of
dplyr::across()
and add logic to circumvent a
new warning emitted byreadr::type_convert()
when no character columns
are present
Bug fixes
- Changed the naming convention for dashboard-related functions to contain the
action verb first (e.g.,sf_copy_dashboard
instead ofsf_dashboard_copy
)
salesforcer 1.0.0
Dependencies
-
Increase the package's default Salesforce API version to 52.0 (Summer '21).
-
Remove uses of {RForcecom} after it was archived on CRAN on 6/8/2021 (#101)
-
Remove LazyData option in DESCRIPTION since
data()
is not utilized -
Deprecate argument in
sf_write_csv()
frompath
tofile
as was done in
{readr} v1.4.0. -
Deprecate argument
bind_using_character_cols
because we will always need
to bind as character and then parse ifguess_types=TRUE
. Per comments in
tidyverse/readr#588 and tidyverse/readr#98, we must read all of the data as
character first and then usetype_convert()
to ensure that we use all values
in the column to guess the type. The default forread_csv()
is to only use
the first 1,000 rows and itsguess_max
argument cannot be set toInf
. -
Change lifecycle status from "Maturing" to "Status" per the retirement of
"Maturing" in the {lifecycle} package. The documentation notes:Previously we used as maturing for functions that lay somewhere between experimental and stable. We stopped using this stage because, like questioning, it’s not clear what actionable information this stage delivers.
In addition, the lifecycle guidance states that experimental packages have
version numbers less than 1.0.0 and may have major changes in its future.
The {salesforcer} package has achieved a stable state with core
functionality implemented and a focus on backwards compatibility due to the
volume of users.
Features
-
Improve documentation to retrieve the access token or session ID after
authentication (#97) -
Improve parsing of Bulk API query recordsets from CSV where all values
in the column will be used to guess the type instead of the first 1000.
Bug fixes
-
Generalize the date and datetime parsing mechanism, such that, reports with
date and datetime fields are not returned as NA (#93) -
Fix the format of the
OwnerChangeOptions
header so it is accepted (#94) -
Fix bug that caused Bulk 2.0 calls to crash when the results had datetime
fields in the recordset (#95)
salesforcer 0.2.2
Dependencies
- This release relaxes the dependency on {dplyr} and brings back use of
rbindlist()
from {data.table} because of limitations ofdplyr::bind_rows()
.
As noted in (tidyverse/dplyr#5429) {dplyr} will only support binding data.frames
or lists of data.frames, not a list of lists which is needed in some
applications of the {salesforcer} package. - Due to other recent changes between {vctrs} and {dplyr}, you may now see the
following warning displayed when loading {salesforcer}, which is emitted by the
loading of {dplyr}:
Warning: replacing previous import 'vctrs::data_frame' by 'tibble::data_frame' when loading 'dplyr'
Features
- None
Bug fixes
- None
salesforcer 0.2.1
Dependencies
- CAUTION: This release requires {dplyr 1.0.0} because {dplyr 1.0.1} introduced
a bug inbind_rows()
with how it binds lists where the list elements have differing
lengths. This is documented in tidyverse/dplyr#5417 and r-lib/vctrs#1073. The
timeline for a fix is unknown as of Aug 16, 2020. You can install the older
version of {dplyr} using the following command:
remotes::install_version("dplyr", "1.0.0")
Features
- Add support for the
defaultLimit
argument insf_search()
to be able to
restrict the number of records from each individual object when searching
across one or more objects. - Add support for updating attachments with the
sf_update_attachments()
function (#79). - Add support for downloading attachments just by its Id. In addition, the
sf_download_attachment()
function returns the file path of the downloaded
content instead of a logical indicating success.
Bug fixes
- Fix bug introduced in {salesforcer 0.2.0} which could not stack records with
errors longer than length 1. The new solution is to always return theerrors
column as a list, which is coerced to length 1 for the record (#66). - Fix bug in
sf_search()
that was passing"true"/"false"
instead of actual
boolean value for thespellCorrection
parameter in the POST body.
salesforcer 0.2.0
Features
-
CAUTION: This release only has automated test coverage on R 4.0.0 or greater.
Users should still be able to install and run using R (>= 3.6.0); however, it
is recommended to upgrade to R 4.0.0 or greater. -
Add experimental support for the Reports and Dashboards REST API.
-
Add support for Bulk 2.0 queries that was added in Salesforce version 47.0
(Winter '20). CAUTION: The Bulk 2.0 API is now the default API when using
sf_query_bulk()
orsf_run_bulk_query()
. Please test prior to upgrading
in a production environment where you are running bulk queries. -
Standardize the column order and format of query and CRUD operations that
prioritizes the object type and Ids over other fields and finaly relationship
fields. CAUTION: This will switch up the order of the columns returned by
your existing code. Please test prior to upgrading in a production environment
where column ordering is a breaking change. For example we prioritize the following
fields in queries alphabetically within this prioritization waterfall:- The
sObject
field first (indicates the record's object if multiple objects returned in the results) - The Id field second (
Id
,id
,sf__Id
) - Salesforce record success status (
Success
,success
,sf_Success
) - Salesforce record created status (
Created
,created
,sf__Created
) - Salesforce record error(s) status (
Error
,error
,errors
,
errors.statusCode
,errors.fields
,errors.message
,sf__Error
) - All other fields from the target object (e.g.
Name
,Phone
, etc.) - Relationship fields (fields from a parent or child of the target). For example,
anything typically containing a dot likeAccount.Id
,Owner.Name
, etc.
- The
-
Standardize the names of functions that submit long running jobs to Salesforce.
These functions now all start withsf_run_*
. However, the original names have
been aliased to the new names so this version will acknowledge the old function
names without deprecation warning.For example, the new names are:sf_query_bulk()
==>sf_run_bulk_query()
sf_bulk_operation()
==>sf_run_bulk_operation()
sf_run_report()
-
Add support for logging in with a proxy without having to use OAuth 2.0 as
the authentication method. When proxy support was first implemented in
{salesforcer} 0.1.4, it only supported proxy connections when logging in via
OAuth 2.0. Now, this untested version of proxy support for basic
authentication has been implemented. This means that proxy users should be
able to login using just a username, password, and security token if their
organization has not implemented OAuth 2.0 or if they do not want to use OAuth
2.0 while logging in via this package. -
Add lifecycle badges to signal maturity of different package aspects.
-
Add two vignettes, one that outlines the query types supported by the package
and another that outlines the new report functionality that was introduced in
this release. -
Add enhanced query test coverage in its own test script.
-
Remove dependency on {data.table} which does not have a build for R-devel. This
should only affectsf_read_metadata()
.
Bug Fixes
-
Fix bug that prevented enabling PKChunking in Bulk 1.0 queries. Users can
now specify usingTRUE/FALSE
or details likechunkSize
that implyTRUE
.
The results are then parsed appropriately by waiting for all individual
batches to finish. (#46) -
Fix bugs in REST and SOAP API queries to prevent infinite looping and
mangling results of relationship queries, specifically parent-to-child
nested queries. (#19, #35, #38, #54) -
Fix bug in REST and SOAP APIs where the creation of a record that fails
duplicate rules will return the duplicate match results as well and cause the
entire function call to fail because it cannot parse the results. Now only the
status code and message are returned and the function will execute
successfully even if the record has not been created due to the rule.
salesforcer 0.1.4
Features
- Rebuilt package against R 4.0 (no issues observed with 3.6.3, 4.0.0, 4.0.1) (#53)
- Upgraded to Salesforce version 48.0 (Spring '20) from version 46.0 (Summer '19)
- Add support for connections through a proxy by setting in package options (#32)
- CRUD operations now atomatically cast date and datetime (Date, POSIXct, POSIXlt, POSIXt)
formats into an accepted string format recognized by Salesforce (YYYY-MM-DDThh:mm:ss.sssZ
) - Add
batch_size
argument to support specifying custom batch sizes for Bulk jobs - Add
sf_convert_lead()
which takes leads and will associate them to the corresponding
Accounts, Contacts, and Opportunities as directed in the input along with many other
options to send an email to the new owner, block the opportunity creation, and more. - Add
sf_create_attachment()
along with a vignette that better describes how to
interact with attachments and other blob data. - Add Attachment and Metadata vignettes along with updating the Bulk vignette.
Bug Fixes
- Fix issue where REST query was not correctly passing and honoring the batch
size control argument to paginate results - Fix issue in results of REST query pagination where the function was looping
infinitely because of a bug in the implementation that would continue using the
samenext_records_url
that was previously passed into the function (#54) - Fix issue where the results of Bulk 1.0 query batches where returning
fewer rows than expected because of usingcontent(..., as="text")
which truncated
the results instead of usingcontent(..., type="text/csv")
(#54) - Fix issue where the details of an object's picklist contains NULLs (e.g. the
validFor
entry of a picklist value is NULL) so now it is replaced with NA and
then can be bound together into a data.frame (#27) - Fix issue where NA values in create, update, and upsert operations where setting
the fields to blank in Bulk APIs, but not the SOAP or REST APIs. Now NA values in
a record will set the field to blank across all APIs (#29) - Fix issue where supplying all NA values in the Id field for certain operations
would result in a cryptic error message ("BAD_REQUEST: Unsupported Tooling Sobject Type"
); the affected operations are: delete, undelete, emptyRecycleBin, retrieve,
update, and findDuplicatesByIds
salesforcer 0.1.3
Features
- Upgraded to version 46.0 (Summer '19) from version 45.0 (Spring '19)
- Add RForcecom backward compatibile version of
rforcecom.getObjectDescription()
- Add
sf_describe_object_fields()
which is a tidyier version ofrforcecom.getObjectDescription()
- Allow users to control whether query results are kept as all character or the
types are guessed (#12) - Add
sf_get_all_jobs_bulk()
so that users can see retrieve details for all
bulk jobs (#13) - Add new utility functions
sf_set_password()
andsf_reset_password()
(#11) - Add two new functions to check for duplicates (
sf_find_duplicates()
,sf_find_duplicates_by_id()
) (#4) - Add new function to download attachments to disk (
sf_download_attachment()
) (#20) - The
object_name
argument, required for bulk queries, will be inferred if left blank,
making it no longer a required argument - Almost all functions in the package now have a
control
argument and dots (...
) which
allows for more than a dozen different control parameters listed insf_control()
to be
fed into existing function calls to tweak the default behavior. For example, if you would
like to override duplicate rules then you can adjust theDuplicateRuleHeader
. If you
would like to have certain assignment rule run on newly created records, then pass in the
AssignmentRuleHeader
(#4, #5) - Add new function
sf_undelete()
which will take records out of the Recycle Bin - Add new function
sf_empty_recycle_bin()
which will remove records permanently
from the Recycle Bin - Add new function
sf_merge()
which combines up to 3 records of the same type
into 1 record (#22)
Bug Fixes
- Fix bug where Username/Password authenticated sessions where not working with
api_type = "Bulk 1.0" - Fix bug where Bulk 1.0 queries that timeout hit an error while trying to abort
since that only supported aborting Bulk 2.0 jobs (#13) - Fix bug that had only production environment logins possible because of hard
coding (@weckstm, #18) - Make
sf_describe_object_fields()
more robust against nested list elements and
also return picklists as tibbles (#16) - Fix bug where four of the bulk operation options (
content_type
,concurrency_mode
,
line_ending
, andcolumn_delimiter
) where not being passed down from
the top level generic functions likesf_create()
,sf_update()
, etc. However,
line_ending
has now been moved into thesf_control
function so it is no longer
explicitly listed for bulk operations as an argument. (@mitch-niche, #23) - Ensure that for SOAP, REST, and Bulk 2.0 APIs the verbose argument prints out
the XML or JSON along with the URL of the call so it can be replicated via cURL or
some other programming language (#8)
salesforcer 0.1.2
Features
- Add support for Bulk 1.0 operations of
"create"
,"update"
,"upsert"
,"delete"
and"hardDelete"
- Bulk 2.0 operations, by default, now return a single
tbl_df
containing all
of the successful records, error records, and unprocessed records - Created internal functions that explicity call each API for an operation. For
example,sf_create()
routes intosf_create_soap()
,sf_create_rest()
, and
sf_bulk_operation()
.
salesforcer 0.1.1
Features
- Add
sf_search()
with REST and SOAP API support for SOSL and free text search - Add
sf_describe_objects()
with REST and SOAP API to return object metadata - Add REST API support for upsert (
sf_upsert()
) - Add SOAP API support for the following operations:
sf_create()
sf_update()
sf_delete()
sf_retrieve()
- Add Metadata API support for the following operations:
sf_create_metadata()
sf_read_metadata()
sf_update_metadata()
sf_upsert_metadata()
sf_delete_metadata()
sf_describe_metadata()
sf_list_metadata()
sf_rename_metadata()
sf_retrieve_metdata()
sf_deploy_metdata()
- Make the default file name for a cached token
.httr-oauth-salesforcer
so that
it does not clash with other package token names
Bug Fixes
-
sf_user_info()
returningargument is of length zero
because token is not
automatically refreshed before calling GET -
sf_token()
ignoring basic auth'ed sessions since it was only looking for a token
usingtoken_avaiable()
. Replace withsf_auth_check()
so now it considers a
session or a token to be "available" (#1).