{ "info": { "author": "Plone/Salesforce Integration Group", "author_email": "plonesf@googlegroups.com", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Framework :: Zope2", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Overview\n========\n\nThe Salesforce-PloneFormGen adapter provides the ability to create, read and\nupdate in a Salesforce.com database via a PloneFormGen form.\n\nUsing the wonderful foundation that is provided by `PloneFormGen`_ (and Plone for\nthat matter), the task of creating a form that collects and validates some\ndesired information is no longer a task that requires developer intervention,\nbut can be done by the content editor with a decent grasp of the Plone user\ninterface. Having this data inside the CMS or emailed is only of limited use\nhowever.\n\n.. _PloneFormGen: http://plone.org/products/ploneformgen\n\nSalesforce.com provides an extensible, powerful platform from which\nto do Customer Relationship Management (CRM) tasks ranging from sales,\nmarketing, nonprofit constituent organizing, and customer service. The\nSalesforce PFG Adapter allows the pragmatic joining of a best of breed CMS\nand CRM so that each can focus on its own strengths in a way that is easy for\nnon-developers to use.\n\nSalesforce.com offers functionality called web-to-lead, but aside from \nPloneFormGen's many strengths over the web-to-lead form builder this software \noffers the following additional features:\n\n- Configurable validation of individual form fields\n- Ability to create as many different records as you'd like from the results \n of one form\n- Ability to create custom sObject records with your form\n- Ability to create whichever type of sObject records, whereas web-to-lead\n creates a Lead record, which can only be converted to a Contact, Account, or\n Opportunity record. Want to directly create a Campaign record from a form? \n That's fine.\n- Ability to create multiple records that are related to each other (i.e. \n create an Account record, then create a Contact record with the previously \n created Account's Id filling the Contact's AccountId field.)\n\nUsage\n=====\n\nConnecting a PloneFormGen form to Salesforce is accomplished by adding a\n\"Salesforce Adapter\" to a PloneFormGen form folder. Typically the site editor\nresponsible setting up the form will:\n\n 1. Create a PloneFormGen form with the necessary fields.\n 2. Add a Salesforce Adapter to the form via Plone's add menu.\n 3. Configure the adapter by selecting:\n\n * the type of Salesforce.com object the adapter should create or update\n * the \"field mapping\" that specifies the correspondence between fields in\n the form and fields in Salesforce.\n * whether the adapter should create a new object, or edit an existing one\n found by matching some expression.\n\n\nMapping Form Fields\n-------------------\n\nOnce you've chosen your sObject type, moving through to the \"field mapping\"\nmanagement screen will display a two-column form for setting which Salesforce \nfield will be populated by each field on your form. Each field on your form is\nrepresented by a single row, with the form field name in the left column, and a\ndrop-down selection menu of all available Salesforce fields on the right. \nSelect the desired Salesforce field for each form field and click \"Save\". \n \nNB: While it is not required to map every form field to a Salesforce field,\nyou will want to make sure that all the sObject fields defined as required\nfields in your Salesforce configuration *do* have a mapping. Otherwise, the\nsObject will not be succesfully created on submission of the form. All required\nfields for your chosen sObject should be marked accordingly and appear at the\ntop of the list of options.\n\nShould you go back and switch to a different sObject type after having provided\na mapping at any time, you'll want to recreate your desired mapping. This is\nintended behavior, since the update would fail (or worse, produce very\nconfusing results) if the previously selected sObject type's mapping were\nmaintained.\n\n\nPreset Values\n-------------\n\nSometimes you want every object created by a particular form to have the same\nvalue for a particular field. For instance, you might want to set the \"Lead\nSource\" field of a Lead to \"Web\". This can be accomplished using the \"Preset\nField Values\" setting.\n\nIn the left column, enter the value you want to store in the field. (e.g. \"Web\")\n\nIn the right column, select the field in which the value should be stored. (e.g.\nLead Source)\n\nIf you need a more complicated expression in order to determine the value, you\ncould instead create a hidden form field, edit its default value override\nexpression, and map it using the form field mapping setting.\n\n\nChained Adapters\n----------------\n\nSalesforce-PloneFormGen adapters can be used to create multiple related\nobjects from a single form. e.g. creating a Contact linked to an Account::\n\n ----------- -------------\n | Account | | Contact |\n ----------- -------------\n | Id | -------------> | AccountId |\n | Name | | LastName |\n ----------- -------------\n\nTo create this link, the 'AccountId' external key of the Contact object needs\nto be set to the Id of the Account it should be associated with. This can be\naccomplished with Salesforce-PloneFormGen by creating one Salesforce Adapter\nfor the Account and one Salesforce adapter for the Contact, and then setting\nthe \"Configure Parent Adapters\" setting of the contact adapter so that it maps\nthe Id from the account adapter to the AccountId field of the Contact.\n\nIn this setup, the Account adapter will be run before the Contact adapter\nregardless of ordering within the PloneFormGen form. In this sense, \nthe \"Contact\" adapter is *dependent upon* the result from the \"Account\" \nadapter. Upon creation of the \"Account\" within Salesforce.com an Id like \n\"01r600123009QiJ\", will be returned along with the API response. This will \nthen be saved and used by the Contact record which is created subsequently.\nCare is taken via validation that \"circularly dependent\" adapters can not be\naccidentally configured.\n\n\nUpdating Existing Objects\n-------------------------\n\nBy default a Salesforce Adapter will always create new objects in Salesforce.\nIt is also possible to use them in an \"update\" mode in which the form will\nfind an object in Salesforce matching a given expression, load the form with\nvalues from that object, and then save changes to the object when the form\nis submitted.\n\nThis can be set up using the following settings on the \"create vs. update\"\nsection of the Salesforce Adapter configuration:\n\n Creation Mode\n Set to 'create' to always create a new object (default). Set to 'update'\n to try to find and update an existing object.\n \n Expression to match existing object for update\n Enter a TALES expression which evaluates to a SOQL WHERE clause that returns\n the Salesforce.com object you want to update. If you interpolate input from\n the request into single quotes in the SOQL statement, be sure to escape it\n using the sanitize_soql method. For example, the following could be used to\n match objects whose Username__c field equals a value passed in the 'username'\n parameter of the request::\n \n python:\"Username__c='\" + sanitize_soql(request.form.get('username', '')) + \"'\"\n\n Behavior if no existing object found\n Determines the desired behavior in case no object was found matching the\n given expression. If set to 'Fail with an error message.', an error will be\n displayed (default). If set to 'create', a new object will be created instead.\n\nNB: The adapters accomplish prepopulation of form fields by modifying the\ndefault value override for all mapped fields. Default value overrides that\nhave already been customized will be left intact.\n\nNB: Salesforce is queried using the match expression only when the form is\nfirst loaded; at which point the Salesforce Id of the object that was found\nis stored in a Zope session. This ensures that changes are always saved to\nthe same object that was loaded, even if other changes happened to the database\nin the meantime. However, it does mean that if the user's session is destroyed\n(such as during a Zope restart), then submitting the form will fail.\n\nWhen using chained adapters, some adapters could be used in update mode while\nothers are used in create mode. For example, this could be used to add a new\nOpportunity associated with an existing Account. Currently this requires\nsetting up at least one form field mapping for each adapter to work properly.\nIn addition, the behavior if a single field is mapped by multiple adapters is\nnot yet defined.\n\nWhen Things Break\n-----------------\n\nSometimes temporary errors may occur when trying to write to Salesforce (for\nexample, if Salesforce is undergoing maintenance). If this occurs when trying\nto process an adapter whose \"creation mode\" is set to \"create,\" a fallback\nmechanism will try to record the information in an alternate way.\n\nIf any savedata adapter is present (whether or not it is enabled),\nthe data will be saved using it. In addition, regardless of whether a savedata\nadapter is present, an e-mail will be sent to the e-mail address configured in\nthe Plone site's e-mail settings, to report that saving to Salesforce failed.\nA site administrator can then take action based on this e-mail as necessary.\nThe end user is directed to the normal form thank you page, so that they are\nnot inconvenienced by the error writing to Salesforce.\n\nThere is no fallback mechanism for adapters in update mode, since this mode\nrequires reading from Salesforce as well.\n\n\nDependencies\n============\n\nTested with Plone 2.5.x, 3.x, and 4.0a2.\n\nDepends upon the beatbox library >= 16.0, which is a Python wrapper to the\nSalesforce.com API. You must have a Salesforce.com account that provides API\naccess.\n\nSalesforceBaseConnector >= 1.2b1. See \nhttp://plone.org/products/salesforcebaseconnector\n\nPloneFormGen and related dependencies.\n\nDataGridField >= 1.6.x.\n\n \nInstallation\n============\n\nTypical for a Zope/Plone product:\n\n* Add the Products.salesforcepfgadapter egg to your buildout. (Or on a\n non-buildout installation, install the product and dependencies as\n appropriate.)\n\n* Rerun buildout and restart Zope.\n\n* If you don't have a Salesforce Base Connector (portal_salesforcebaseconnector)\n in the root of your site yet, add one via the ZMI add menu, and configure its\n login credentials.\n\n* Go to the Site Setup page in the Plone interface and click on the Add/Remove\n Products link. Choose salesforcepfgadapter (check its checkbox) and click the \n Install button. If not done already, this will install PloneFormGen in \n addition to the salesforcepfgadapter. If PloneFormGen is not available on the \n Add/Remove Products list, it usually means that the product did not load due \n to missing prerequisites.\n\nPermissions\n===========\n\nSee Permissions section of README.txt within PloneFormGen.\n\nSecurity\n========\n\nSee Security section of README.txt within PloneFormGen.\n\nKnown Problems\n==============\n\nSee Known Problems section of README.txt within PloneFormGen. In addition:\n\n- Beatbox, the underlying Python wrapper library to the Salesforce.com API \n does not raise a custom exception in the scenario of the API being \n unavailable due to scheduled maintenance as is evident within the following \n response: SoapFaultError: 'UNKNOWN_EXCEPTION' 'UNKNOWN_EXCEPTION: Server \n unavailable due to scheduled maintenance'\n\n\nFurther Information\n===================\n\nProduct home is http://plone.org/products/salesforcepfgadapter. A \n`documentation area`_ and `issue tracker`_ are available at the linked \nlocations.\n\n.. _documentation area: http://plone.org/documentation/kb/integrating-plone-with-salesforce\n.. _issue tracker: http://plone.org/products/salesforcepfgadapter/issues\n\nA Google Group, called `Plone Salesforce Integration`_ exists with the sole \naim of discussing and developing tools to make Plone integrate well with\nSalesforce.com. If you have a question, joining this group and posting to the \nmailing list is the likely best way to get support.\n\n.. _Plone Salesforce Integration: http://groups.google.com/group/plonesf\n\nFailing that, please try using the Plone users' mailing list or the #plone irc \nchannel for support requests. If you are unable to get your questions answered \nthere, or are interested in helping develop the product, see the credits below \nfor individuals you might contact.\n\n\nCredits\n=======\n\nThe Plone & Salesforce crew in Seattle and Portland:\n\n- Jon Baldivieso \n- Andrew Burkhalter \n- Brian Gershon \n- David Glick \n- Jesse Snyder \n- Alex Tokar \n\nWith special PloneFormGen guest star:\n\n- Steve McMahon \n\nJesse Snyder and NPower Seattle for the foundation of code that has become\nSalesforce Base Connector\n \nSimon Fell for providing the beatbox Python wrapper to the Salesforce.com API\n \nSalesforce.com Foundation and Enfold Systems for their gift and work on \nbeatbox (see: \nhttp://gokubi.com/archives/onenorthwest-gets-grant-from-salesforcecom-to-integrate-with-plone)\n\nSee the CHANGES.txt file for the growing list of people who helped\nwith particular features or bugs.\n\n\nLicense\n=======\n\nDistributed under the GPL.\n\nSee LICENSE.txt and LICENSE.GPL for details.\n\n\nChangelog\n=========\n\n1.9.1 (2012-02-01)\n\n- If there's a field named ``credit_card``, don't include it in the fallback\n email.\n [davisagli]\n\n1.9.0 (2012-1-27)\n\n- Avoid caching Salesforce field info on the adapter instance. Instead, use\n the type description cache of the beatbox client (which can be purged via\n the Salesforce base connector in the ZMI).\n [davisagli]\n\n- Include the exception message in the fallback e-mail.\n [davisagli]\n\n- Add a view and action to FormFolders which summarizes the configuration of\n all Salesforce adapters.\n [jessesnyder]\n\n1.9.0b1 (2010-12-23)\n\n- Add fallback logic for when the adapter cannot write to Salesforce. In this\n case it will first try saving to an enabled savedata adapter, if present.\n Next it will try saving to a disabled savedata adapter, if present. Finally\n it will try sending an e-mail to the site's admin e-mail address. An e-mail\n is sent in all 3 cases to alert the administrator that writing to Salesforce\n failed. If one of the fallbacks succeeds, the user filling out the form will\n see the normal thank you page instead of an error.\n [davisagli]\n\n1.8.0 (2010-12-01)\n\n- Add a new option for what to do in update mode if no object is found:\n \"Silently skip this and any subsequent Salesforce adapters\"\n [davisagli]\n\n1.7.0 (2010-11-16)\n\n- Obtain an Id from adapters in update mode even if they don't have any fields\n mapped, so that that Id can be used from a chained adapter. This makes it\n possible to create objects with a lookup field to an existing object that\n is found by an arbitrary SOQL expression, rather than simply by its Id.\n [davisagli]\n\n1.6.4 (2010-08-27)\n\n- Fix regression introduced in 1.6.2 for salesforcepfgadapter subclasses\n that don't provide the creationMode field, only for real this time.\n [jbaldivieso]\n\n1.6.3 (2010-08-15)\n\n- Fix regression introduced in 1.6.2 for salesforcepfgadapter subclasses\n that don't provide the creationMode field.\n [davisagli]\n\n1.6.2 (2010-08-03)\n\n- Properly handle blank form fields in update mode by nullifying the\n corresponding Salesforce field.\n [yomatters]\n\n1.6.1 (2010-03-26)\n\n- Fix regressions in Plone 2.5.\n [davisagli]\n\n- Fix regression in Plone 4 of timezone handling of datetimes when\n prepopulating fields.\n [davisagli]\n\n- Add support for TALES expressions in the preset value map.\n [davisagli]\n\n1.6.0 (2010-02-24)\n\n- Fix a regression from hiding read-only fields from the UI -- createable\n fields still need to be an option even if they aren't updateable. This\n closes http://plone.org/products/salesforcepfgadapter/issues/17\n [davisagli]\n\n- Code defensively so that the SFPFG adapter modified handler doesn't fail\n when encountering adapter subclasses that don't have a 'creationMode' field.\n [davisagli]\n\n1.6b2 (2009-12-11)\n\n- Don't show read-only fields as options in the field mapping UI. This closes\n issue #14.\n [davisagli]\n\n- Remove obsolete actions from the type configuration. This closes issue #16.\n [davisagli]\n\n- Allow mapping the filename and mimetype of file uploads to fields in SFDC\n (probably on an Attachment object) in addition to the data itself.\n [davisagli]\n\n- Added ability to view and update values from existing Salesforce objects,\n found by matching an arbitrary expression. See the README for details.\n [davisagli]\n\n- Restored Plone 2.5 support and added compatibility with Plone 4.\n [davisagli]\n\n- Added a 'Preset field values' setting so that hardcoded values can be mapped\n to Salesforce fields without having to create a hidden form field. Thanks to\n Jon Stahl for the suggestion.\n [davisagli]\n\n1.6b1 (2009-09-08)\n\n- Adjust calls to the salesforcebaseconnector query method to use a single\n full SOQL statement. beatbox >= 16.0dev is now required.\n [davisagli]\n\n- Use the field id instead of title as the key column for the field mapping,\n so that it's possible to set the mapping programmatically without worrying\n about the titles.\n [davisagli]\n\n- Cut out duplicate setup code and unnecessary API calls throughout testing\n with use of onsetup decorator.\n [andrewb]\n\n- Move substantial portions of package installation to GenericSetup.\n [andrewb]\n\n- No longer supporting Plone 2.5, pull out all the complex workarounds\n associated with support older version.\n [andrewb]\n\n- Added metadata.xml to GenericSetup profile.\n [andrewb]\n\n\n1.5.2 - released August 13, 2009\n\n- Fix broken release.\n [davisagli]\n\n1.5.1 - released August 12, 2009\n\n- Fix for issue #13, whereby hitting the next button while editing a\n Salesforce Adapter with PloneFormGen 1.5b2 redirected off to the Form\n Folder's Quick Edit UI, rather than the field mapping UI as expected.\n [andrewb]\n\n1.5 - released February 18, 2009\n\n- Clean-up of overly long lines (e.g. > 80 chars) in README.txt\n [andrewb]\n\n1.5rc1\n\n- Added information about known issue #30 within dependency DataGridField.\n http://plone.org/products/datagridfield/issues/30\n [andrewb]\n\n- Added read_permission protection to how Salesforce Adapters have been\n configured. The title is viewable by all, but the SFObjectType, fieldMap,\n and dependencyMap fields are now only visible to those with the\n ModifyPortalContent permission. Now 'base_view' respects this when\n regurgitating the values on any give adapter object\n [andrewb]\n\n- Stop using trademarked Salesforce.com icon\n [davisagli]\n\n1.5a3\n\n- Better handling of empty FormIntegerField values, which when left blank were\n filled by an empty string that was being passed along within the created\n object. In the case of a string-like field, this was fine, but integer\n fields (i.e. documented as xsd:double and xsd:int format in the SF WSDL)\n were another story. This resolves:\n http://plone.org/products/salesforcepfgadapter/issues/8\n Note: If a FormIntegerField was a required field and therefore came through\n as expected in the request, this was handled properly\n [andrewb, thanks greenstork for bug report]\n\n\n1.5a2\n\n- The mutator for our SFObjectType field now takes into account the fact that\n there could exist invalid field mappings and/or dependency mappings for the\n ultimately chosen sObject type, which could lead to an Invalid Field\n exception, should the mappings not be reconfigured. This is primarily\n useful in the case where the user sets up an adapter to create one field\n type, but later switches to another. This fixes the following issue:\n http://plone.org/products/salesforcepfgadapter/issues/7\n [andrewb]\n\n- Appropriate cleanup of renamed and/or removed adapters with the Parent\n Adapter mapping interface. Similar approach to what exists for field\n mapping cleanup.\n [andrewb]\n\n- Better handling of empty FormDateField values, which were plagued by errors\n casting to DateTime format and if successful an invalid xsd:dateTime format.\n This resolves:\n http://plone.org/products/salesforcepfgadapter/issues/6\n http://plone.org/products/salesforcepfgadapter/issues/5\n Note: If a FormDateField was a required field and therefore came through as\n expected in the request, this was handled properly\n [andrewb, thanks greenstork for bug report]\n\n- Adding support for PloneFormGen's FormFileField type to be populated with a\n binary file and uploaded directly to Salesforce.com upon proper base64\n encoding. There may be other use cases, but the Attachment type in\n Salesforce can be associated with any other type, as related by the\n ParentId, field and is where binary data, stored on the Body field, is\n typically associated with a record.\n [andrewb]\n\n- In order to reduce the configuration burden upon the user (i.e. placing\n Salesforce Adapters in the order they will need to operate), we build and\n run adapters from the final adapter within the folder. This adapter in turn\n manages the needed order and creates the Salesforce records appropriately.\n The 1.5a1 release, however, does not account for disabled adapters. I.E.\n those that are checked off in the form folder's adapter field. This is now\n fixed. See:\n http://plone.org/products/salesforcepfgadapter/issues/3\n [andrewb]\n\n- In the same category as the following issue:\n http://plone.org/products/salesforcepfgadapter/issues/3, we need to account\n for those adapters with an \"execCondition\" that fails. This is now fixed.\n See: http://plone.org/products/salesforcepfgadapter/issues/4\n [andrewb]\n\n\n1.5a1\n\n- Adding new DataGridField FixedColumn with visibility set to false for the\n the 'fieldMap' schema field on the Salesforce Adapter, which stores the\n relative path from the parent form to the field in question. Previously, we\n were 'building' the data structure for the soon to be created Salesforce\n object based on mappings keyed off of each field's title. Since titles\n aren't necessarily unique, this was fragile and with the introduction of\n support for mapping fieldset-based fields, the code was getting ridiculous.\n *NOTE*: If jumping to this version of salesforcepfgadpater from previous\n versions, you'll need to reinstall the product from the ZMI or the\n Add/Remove Products control panel. This will trigger the migration of all\n existing Salesforce Adapter objects, to include this essential new column\n for the field map.\n [andrewb]\n\n- Reworking overly fragile 'do we need to migrate' infrastructure for versions\n prior to 1.0rc1 which assumed that we'd be listing all known versions to the\n end of time and also that running a profiles steps wouldn't bump the\n installedversion attribute on an installed product, as it now appears to do\n in CMFQIT version 2.1.4. This should allow for a simultaneous Plone 3.1.x\n migration and Salesforce PFG Adapter upgrade.\n [andrewb]\n\n- Added support for form fields within a folderish \"fieldset\" both from a\n mapping and creation within Salesforce.com objects perspective.\n [andrewb]\n\n- Adding test/code coverage protecting against a maximum recursion depth\n exceeded error via a direct call to getSortedSFAdapters. This is feasible\n in the case where Salesforce Adapters are configured outside the context\n of the existing Archetype validation code.\n [andrewb]\n\n- Added support for \"chained adapters\" (that is, forms that create separate,\n but linked SF objects) including: schema extensions for adapters, validation\n against circular chains, and execution of chains in the correct order.\n [jbaldivieso, andrewb]\n\n1.0 - released April 4, 2008\n\n- Added test coverage of onSuccess, the critical piece in ensuring that\n our form values make their way into Salesforce.com as the appropriate\n SFObject type with configured mapping. I suppose test coverage of\n the main functionality is okay during an rc cycle :)\n [andrewb]\n\n1.0rc2\n\n- Using proper Generic Setup API \"runAllImportStepsFromProfile\", rather than\n deprecated \"setImportContext\". For more information, see the very helpful:\n http://www.nabble.com/Product-install-regression--td14165955.html#a14165955\n [andrewb]\n\n- Cleaning up naughty \"import \\*\" statement within Install.py\n [andrewb]\n\n1.0rc1\n\n- Providing test and migration for legacy adapters that didn't have the\n capability to mark required fields in the UI\n [andrewb, jessesnyder]\n\n- Renaming the Salesforce PFG Adapter's archetype_name to Salesforce\n Adapter, in attempt to increase non-technical accessibility.\n Provided migration for the same\n [andrewb, jessesnyder]\n\n - Add zope security checks to methods in the SalesforcePFGAdapter class\n [jessesnyder]\n\n - Tweaked i18n infrastructure and added German translation.\n [davisagli]\n\n - Don't show extraneous schemata in Plone3\n [jessesnyder]\n\n - Ran Zope's test coverage feature against our code base and extended test\n coverage to key parts of the public aspects of our code base\n [andrewb]\n\n - Implement IMultiPageSchema so that schemata can be processed separately and\n in order, since the field mapping schemata depends on the default schemata\n being submitted first.\n [jessesnyder]\n\n - Re-ordered the adapter's schemata to put 'field mapping' before\n 'overrides'. [davisagli]\n\n - Worked around FGDateField issue to format submitted dates properly for\n Salesforce.com input. Used DateTime.HTML4() method on field value\n [ghnatiuk, davisagli]\n\n - Adding labeling to the field mapping ui to show those fields for the\n chosen SFObject, which are non-nillable (i.e required) and don't have a\n computed value (i.e. as in a unique id, which is required but you have no\n control over)\n [jessesnyder, andrewb]\n\n - Sorting of fields that are required first, then those that are optional\n second in the field mapping ui\n [jessesnyder, andrewb]\n\n1.0-alpha2\n\n - Worked around issue where the DataGridField strips proceeding/trailing\n spaces for its FixedRow values, but our generateFormFieldRows method did\n not, thus each save of the adapter produced duplicate mappings in the\n DataGridField UI\n [jessesnyder, andrewb]\n\n - Providing custom mutator for the field map user interface, which now\n auto-cleans up those fields that have been removed or re-titled\n [jessesnyder, andrewb]\n\n1.0-alpha1\n\n - Initial import and creation of standalone product originally created at the\n following branch:\n\n - http://svn.plone.org/svn/collective/PloneFormGen/branches/salesforce_adapter_branch/", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://groups.google.com/group/plonesf", "keywords": "Zope CMF Plone Salesforce.com CRM PloneFormGen forms integration", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "Products.salesforcepfgadapter", "package_url": "https://pypi.org/project/Products.salesforcepfgadapter/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/Products.salesforcepfgadapter/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://groups.google.com/group/plonesf" }, "release_url": "https://pypi.org/project/Products.salesforcepfgadapter/1.9.1/", "requires_dist": null, "requires_python": null, "summary": "PloneFormGen adapter allowing for creation of arbitrary Salesforce.com records based on data collected from a web form", "version": "1.9.1" }, "last_serial": 785196, "releases": { "1.5": [ { "comment_text": "", "digests": { "md5": "027077f403635be9e26ec79450a3b000", "sha256": "70454c748b7c2c3d1270d5ee844067ea25ae7cd34919436b0378c63224ed4621" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.5.tar.gz", "has_sig": false, "md5_digest": "027077f403635be9e26ec79450a3b000", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54449, "upload_time": "2009-02-19T05:43:55", "url": "https://files.pythonhosted.org/packages/9e/56/b9b47ee3e48fa1d36bb16c8d6e6bc29741bbf0c512e67dd10175bd60ef55/Products.salesforcepfgadapter-1.5.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "f06e203aa45948f8df9cddded9c393d1", "sha256": "0fc6160dcd5a5be63cf981878bc10b8cc9272476346a5140fa501ab004fc6b6a" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.5.1.tar.gz", "has_sig": false, "md5_digest": "f06e203aa45948f8df9cddded9c393d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54768, "upload_time": "2009-08-13T00:59:39", "url": "https://files.pythonhosted.org/packages/cb/70/ad6529e0315176edef7ccf49d42576c20529194d2b1a89cb4c4ca94f7f4e/Products.salesforcepfgadapter-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "09c16061ba6f3df3f8800ae2deed7124", "sha256": "82bcbd18b51afd2f5434b1802b8312a9864efcd0048472830edd6ee628a9527b" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.5.2.zip", "has_sig": false, "md5_digest": "09c16061ba6f3df3f8800ae2deed7124", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 78334, "upload_time": "2009-08-13T20:12:26", "url": "https://files.pythonhosted.org/packages/de/89/183d9b6ea01721cf2bf526611593545c82146169e36b718bc65893a4996f/Products.salesforcepfgadapter-1.5.2.zip" } ], "1.5a3": [ { "comment_text": "", "digests": { "md5": "59cac1c7734c7b9d098f83c296034561", "sha256": "04f3c206970b70d3f2bc68785df6dab5488aadf1da6c08932c2e14c51faf9c3a" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.5a3-py2.4.egg", "has_sig": false, "md5_digest": "59cac1c7734c7b9d098f83c296034561", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 111850, "upload_time": "2008-06-25T23:24:24", "url": "https://files.pythonhosted.org/packages/61/9e/06f99ce64d864f837ab330702159057722d305fb1d3fe8f09082ef78932b/Products.salesforcepfgadapter-1.5a3-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "e78b616c1bdd84ecf41eeb1d03708e28", "sha256": "fbca859f3b832d0ff7d92d4ea84c3e9a08e5146cd04dbcfb0d525983eb474b10" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.5a3.tar.gz", "has_sig": false, "md5_digest": "e78b616c1bdd84ecf41eeb1d03708e28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52381, "upload_time": "2008-06-25T23:24:21", "url": "https://files.pythonhosted.org/packages/20/50/cf1ad0c9818e97ec169700bb274b19e350e94dea95accd8c552c537fdaaa/Products.salesforcepfgadapter-1.5a3.tar.gz" } ], "1.5rc1": [ { "comment_text": "", "digests": { "md5": "69b362c7c1f820785b25fd5d159d3d8a", "sha256": "1400b658443d52a12b8e2706e55023460f0efab2f882a4d389ff29cd8abba96d" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.5rc1.tar.gz", "has_sig": false, "md5_digest": "69b362c7c1f820785b25fd5d159d3d8a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54168, "upload_time": "2009-01-29T23:55:45", "url": "https://files.pythonhosted.org/packages/1a/15/a33569b7eb217d95c17494a2f0a94a665d141fb7015c7beac062841ad883/Products.salesforcepfgadapter-1.5rc1.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "681ebef9867a30a819abbb5b58c6c256", "sha256": "778758f07178c6d10748e61085f3eb375ca5d49251e853efe27a9d1bfbf54292" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.6.0.zip", "has_sig": true, "md5_digest": "681ebef9867a30a819abbb5b58c6c256", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 102581, "upload_time": "2010-02-25T00:01:23", "url": "https://files.pythonhosted.org/packages/f9/ba/2df2ca4fa0a0d85b55090632b5781d86d9b5005983d0e16570716e9897ab/Products.salesforcepfgadapter-1.6.0.zip" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "df5d9eba6ff0ab27fecb8e109c010349", "sha256": "badb6e938c379ca9505302ef810be6ef4b1c57b56b69be5b6ed34ab7e912c486" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.6.1.zip", "has_sig": true, "md5_digest": "df5d9eba6ff0ab27fecb8e109c010349", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 105609, "upload_time": "2010-03-27T00:21:02", "url": "https://files.pythonhosted.org/packages/a9/50/37ebc2c10632957cc343821f8a089bd6f77ed1e8a7ece4800bdba5cd8ad1/Products.salesforcepfgadapter-1.6.1.zip" } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "c370ad15d5b994ae241f22dc312a35ef", "sha256": "d1ccb0ec75bc44b2a66408613a034db226eeeaa93dad71a369164e8482a4253f" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.6.2.zip", "has_sig": true, "md5_digest": "c370ad15d5b994ae241f22dc312a35ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 107069, "upload_time": "2010-08-03T22:36:48", "url": "https://files.pythonhosted.org/packages/a5/39/aa1ccd7364397a60f501f50b61c14ed1f2a9b0b8c052d3bc115eb266752c/Products.salesforcepfgadapter-1.6.2.zip" } ], "1.6.3": [ { "comment_text": "", "digests": { "md5": "2cb726e14bdce27754a1abccff43fc4e", "sha256": "6c4a3c31db0934c9699b2127c3f06017fcc313c7b342d7ad94b7e3d32c319d62" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.6.3.zip", "has_sig": true, "md5_digest": "2cb726e14bdce27754a1abccff43fc4e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 107184, "upload_time": "2010-08-16T05:39:47", "url": "https://files.pythonhosted.org/packages/87/c1/5dc1f13fb333955bd4d399c153843e26b7e4469c32c5f3d7624a988937e2/Products.salesforcepfgadapter-1.6.3.zip" } ], "1.6.4": [ { "comment_text": "", "digests": { "md5": "9ff043b0e9d04381a0238d1eeb3f1fdb", "sha256": "9977fc60dfdfaa094a25aec755c24839b6be802bacc366a4a8f874cc0ed5e5a5" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.6.4.zip", "has_sig": false, "md5_digest": "9ff043b0e9d04381a0238d1eeb3f1fdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106737, "upload_time": "2010-08-27T23:58:16", "url": "https://files.pythonhosted.org/packages/47/a4/ca1e9754c750706f0fbfcc40b1b354f6c4a82d2a24186a6c0d71d6993e48/Products.salesforcepfgadapter-1.6.4.zip" } ], "1.6b1": [ { "comment_text": "", "digests": { "md5": "2624bf9c61ec09814d8f78554c88358c", "sha256": "460a02f89e36f40c52385bf3ba8a41207c16546eb17bee006168ce7b814981b8" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.6b1.zip", "has_sig": false, "md5_digest": "2624bf9c61ec09814d8f78554c88358c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86218, "upload_time": "2009-09-09T00:44:04", "url": "https://files.pythonhosted.org/packages/2e/0b/5fe9b958fae9400960083a5d95cd1c453a03232e887d58a21c3e8920a0e6/Products.salesforcepfgadapter-1.6b1.zip" } ], "1.6b2": [ { "comment_text": "", "digests": { "md5": "1c03270fd4af7d3431dfcef63ca78909", "sha256": "d1c22ef789a41fb6dafbad0589d0667fa9afc31ff79b547580fac59b85df50ba" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.6b2.zip", "has_sig": false, "md5_digest": "1c03270fd4af7d3431dfcef63ca78909", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 102084, "upload_time": "2009-12-11T21:16:00", "url": "https://files.pythonhosted.org/packages/00/a3/b97ac51d83d9aaeaf2a5bbf7c59cf9c057a1fd90e180d1827534c28afd76/Products.salesforcepfgadapter-1.6b2.zip" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "ab52b5359c8f21992e5670afa610381f", "sha256": "1b795b06b1fdcb9f88caeed995cf5f45340aa35376076f6546b3bb95879b6db7" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.7.0.zip", "has_sig": true, "md5_digest": "ab52b5359c8f21992e5670afa610381f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 107342, "upload_time": "2010-11-16T23:33:26", "url": "https://files.pythonhosted.org/packages/fc/26/4f7e08a6c7af873e521c42e03480896271e40ea4df8dfb3830570fcc5ca7/Products.salesforcepfgadapter-1.7.0.zip" } ], "1.8.0": [ { "comment_text": "", "digests": { "md5": "5859d19569127a1f26f3eaa5bc8c48fe", "sha256": "7a33d1d4d35dcce7004988900e0589ecc7c7e3440c6023eb2b68730364c0931d" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.8.0.zip", "has_sig": true, "md5_digest": "5859d19569127a1f26f3eaa5bc8c48fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 107686, "upload_time": "2010-12-01T23:39:33", "url": "https://files.pythonhosted.org/packages/a8/d8/7a35b7615f11c9f5b35c7b1b8d677f1962e55b7beabbb5046ed122a9f5d0/Products.salesforcepfgadapter-1.8.0.zip" } ], "1.9.0": [ { "comment_text": "", "digests": { "md5": "139e49c38ed3e3d3fca3bc5fe3855416", "sha256": "e4c4ec7c92ff151cc94468937e1acb625eedf2e5ab7f9f782de7dccd25c4fdc6" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.9.0.zip", "has_sig": false, "md5_digest": "139e49c38ed3e3d3fca3bc5fe3855416", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 115634, "upload_time": "2012-01-27T23:03:10", "url": "https://files.pythonhosted.org/packages/fa/ad/60119eea6b16635df26b38d34ca620218ba8d8b2db3bdc6e85bd98bfcb21/Products.salesforcepfgadapter-1.9.0.zip" } ], "1.9.0b1": [ { "comment_text": "", "digests": { "md5": "990b9c8dcd364c466b8c2836192006fe", "sha256": "ec866e054468607ec6a2477048a2e8d9d072dee5c2d141ade7e757b3c21fdfe1" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.9.0b1.zip", "has_sig": false, "md5_digest": "990b9c8dcd364c466b8c2836192006fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 111295, "upload_time": "2010-12-24T00:40:42", "url": "https://files.pythonhosted.org/packages/34/cd/d56dc28a83322d4557c3df4b82f9c582f852bff2c8a1d82e16599a83deeb/Products.salesforcepfgadapter-1.9.0b1.zip" } ], "1.9.1": [ { "comment_text": "", "digests": { "md5": "8f3f25dd924f263c5ec431fbaef9f324", "sha256": "c5f7c39da64a3844a5837f8440a4ed89e59fe13e9450b273c7cecb602cb55923" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.9.1.zip", "has_sig": false, "md5_digest": "8f3f25dd924f263c5ec431fbaef9f324", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 115802, "upload_time": "2012-02-01T20:37:39", "url": "https://files.pythonhosted.org/packages/41/75/fa0e2b97d1065d6a7657e7f1d57801052970fa9c8c2f52034b15d5c10be4/Products.salesforcepfgadapter-1.9.1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8f3f25dd924f263c5ec431fbaef9f324", "sha256": "c5f7c39da64a3844a5837f8440a4ed89e59fe13e9450b273c7cecb602cb55923" }, "downloads": -1, "filename": "Products.salesforcepfgadapter-1.9.1.zip", "has_sig": false, "md5_digest": "8f3f25dd924f263c5ec431fbaef9f324", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 115802, "upload_time": "2012-02-01T20:37:39", "url": "https://files.pythonhosted.org/packages/41/75/fa0e2b97d1065d6a7657e7f1d57801052970fa9c8c2f52034b15d5c10be4/Products.salesforcepfgadapter-1.9.1.zip" } ] }