public override DataTableStore GetDataTable(DataTableStore dt)
        {
            dt.AddIdentifierColumn(typeof(string));

            var uriHelper        = new MailChimpUriHelper(APIKey);
            var mapping          = new DataSchemaMapping(SchemaMap, Side);
            var schema           = MailChimpDataSchema.MailChimpMemberSchema();
            var included_columns = SchemaMap.GetIncludedColumns();

            int  total_items = 0;
            int  count       = 0;
            bool abort       = false;

            helper.SetAuthorizationHeader(APIKey);

            do
            {
                var result = helper.GetRequestAsJson($"{uriHelper.ListServiceUrl}/{ListId}/members?count={PageSize}&offset={count}");

                total_items = result["total_items"].ToObject <int>();

                if (result["members"] != null)
                {
                    foreach (var item_row in result["members"])
                    {
                        count++;

                        var newRow = dt.NewRow();
                        var id     = ProcessRow(mapping, schema, included_columns, item_row, newRow);

                        if (dt.Rows.AddWithIdentifier(newRow, id) == DataTableStore.ABORT)
                        {
                            abort = true;
                            break;
                        }
                    }
                }
            } while (!abort && count < total_items);

            return(dt);
        }
Beispiel #2
0
        public override DataTableStore GetDataTable(DataTableStore dt)
        {
            dt.AddIdentifierColumn(typeof(string));

            var uriHelper = new MailChimpUriHelper(APIKey);
            var mapping   = new DataSchemaMapping(SchemaMap, Side);
            var schema    = MailChimpDataSchema.MailChimpListSchema();

            helper.SetAuthorizationHeader(APIKey);
            var result = helper.GetRequestAsJson(uriHelper.ListServiceUrl);

            if (result["lists"] != null)
            {
                foreach (var item_row in result["lists"])
                {
                    var newRow = dt.NewRow();

                    foreach (DataSchemaItem item in SchemaMap.GetIncludedColumns())
                    {
                        string columnName = mapping.MapColumnToDestination(item);

                        var schemaItem = schema[columnName];

                        if (schemaItem.IsSubValue)
                        {
                            foreach (var six in item_row[schemaItem.ObjectName])
                            {
                                foreach (var sub_item in item_row[schemaItem.ObjectName].Children <JProperty>())
                                {
                                    if (sub_item.Name.Equals(schemaItem.FieldName))
                                    {
                                        newRow[item.ColumnName] = DataSchemaTypeConverter.ConvertTo(sub_item.Value, item.DataType);
                                    }
                                }
                            }
                        }
                        else
                        {
                            newRow[item.ColumnName] = DataSchemaTypeConverter.ConvertTo(item_row[schemaItem.FieldName], item.DataType);
                        }
                    }

                    if (dt.Rows.AddWithIdentifier(newRow, DataSchemaTypeConverter.ConvertTo <string>(item_row["id"])) == DataTableStore.ABORT)
                    {
                        break;
                    }
                }
            }

            return(dt);
        }
Beispiel #3
0
        public override DataTableStore GetDataTable(DataTableStore dt)
        {
            //Set the Datasource Identifier.
            dt.AddIdentifierColumn(typeof(int));

            DataSchemaMapping      mapping = new DataSchemaMapping(SchemaMap, Side);
            IList <DataSchemaItem> columns = SchemaMap.GetIncludedColumns();
            var schema = DataSourceInfo.GetPipedriveDataSchema(helper);

            int  start         = 0;
            bool continue_load = false;

            do
            {
                var result = helper.GetRequestAsJson($"{DataSourceInfo.PipedriveEndpointUrl}&start={start}&limit={PageSize}");

                //Loop around your data adding it to the DataTableStore dt object.
                foreach (var item_row in result["data"])
                {
                    if (dt.Rows.AddWithIdentifier(mapping, columns,
                                                  (item, columnName) =>
                    {
                        var pds = schema[columnName];
                        return(pds.Parser.ParseValue(item_row[columnName]));
                    }
                                                  , item_row["id"].ToObject <int>()) == DataTableStore.ABORT)
                    {
                        break;
                    }
                }

                continue_load = result["additional_data"]?["pagination"] != null && result["additional_data"]["pagination"]["more_items_in_collection"].ToObject <bool>();
                if (continue_load)
                {
                    start = result["additional_data"]["pagination"]["next_start"].ToObject <int>();
                }
            } while (continue_load);

            return(dt);
        }
        public static IDictionary <string, PipedriveDataSchemaItem> GetPipedriveDataSchema(HttpWebRequestHelper helper, string name, string url)
        {
            var result = new Dictionary <string, PipedriveDataSchemaItem>();

            var schema = helper.GetRequestAsJson(url);

            foreach (var item in schema["data"])
            {
                var pdsi = new PipedriveDataSchemaItem();

                pdsi.Id            = ConvertTo <int>(item["id"]?.ToObject <object>(), -1);
                pdsi.Key           = item["key"].ToObject <string>();
                pdsi.Name          = item["name"]?.ToObject <string>();
                pdsi.Order_nr      = ConvertTo <int>(item["order_nr"]?.ToObject <object>(), 0);
                pdsi.Picklist_Data = item["picklist_data"]?.ToObject <string>();

                switch (item["field_type"]?.ToObject <string>())
                {
                case "int":
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldInteger;
                    break;
                }

                case "varchar":
                {
                    switch (pdsi.Key)
                    {
                    case "email":
                    {
                        pdsi.Field_Type = PipedriveDataSchemaItemType.FieldEmail;
                        pdsi.Parser     = new EmailValueParser();
                        break;
                    }

                    case "im":
                    {
                        pdsi.Field_Type = PipedriveDataSchemaItemType.FieldInstantMessenger;
                        pdsi.Parser     = new EmailValueParser();
                        break;
                    }

                    default:
                    {
                        pdsi.Field_Type = PipedriveDataSchemaItemType.FieldString;
                        break;
                    }
                    }
                    break;
                }

                case "visible_to":
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldVisibleTo;
                    break;
                }

                case "text":
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldText;
                    break;
                }

                case "double":
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldDouble;
                    break;
                }

                case "user":
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldUser;
                    pdsi.Parser     = new UserValueParser();
                    break;
                }

                case "org":
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldOrg;
                    pdsi.Parser     = new OrgValueParser();
                    break;
                }

                case "date":
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldDate;
                    break;
                }

                case "phone":
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldPhone;
                    pdsi.Parser     = new EmailValueParser();
                    break;
                }

                case "enum":
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldEnum;
                    pdsi.Parser     = new EnumValueParser()
                    {
                        Options = pdsi.Options
                    };
                    break;
                }

                case "people":
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldPeople;
                    pdsi.Parser     = new PeopleValueParser();
                    break;
                }

                case "monetary":
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldDecimal;
                    break;
                }

                default:
                {
                    pdsi.Field_Type = PipedriveDataSchemaItemType.FieldString;
                    break;
                }
                }

                pdsi.Add_time                = item["add_time"]?.ToObject <DateTime?>();
                pdsi.Update_time             = item["update_time"]?.ToObject <DateTime?>();
                pdsi.Last_updated_by_user_id = ConvertTo <int>(item["last_updated_by_user_id"]?.ToObject <object>(), -1);

                pdsi.Active_flag          = ConvertTo <bool>(item["active_flag"]?.ToObject <object>(), false);
                pdsi.Edit_flag            = ConvertTo <bool>(item["edit_flag"]?.ToObject <object>(), false);
                pdsi.Index_visible_flag   = ConvertTo <bool>(item["index_visible_flag"]?.ToObject <object>(), false);
                pdsi.Details_visible_flag = ConvertTo <bool>(item["details_visible_flag"]?.ToObject <object>(), false);
                pdsi.Add_visible_flag     = ConvertTo <bool>(item["add_visible_flag"]?.ToObject <object>(), false);
                pdsi.Important_flag       = ConvertTo <bool>(item["important_flag"]?.ToObject <object>(), false);
                pdsi.Bulk_edit_allowed    = ConvertTo <bool>(item["bulk_edit_allowed"]?.ToObject <object>(), false);
                pdsi.Searchable_flag      = ConvertTo <bool>(item["searchable_flag"]?.ToObject <object>(), false);
                pdsi.Filtering_allowed    = ConvertTo <bool>(item["filtering_allowed"]?.ToObject <object>(), false);
                pdsi.Sortable_flag        = ConvertTo <bool>(item["sortable_flag"]?.ToObject <object>(), false);
                //pdsi.Mandatory_flag = ConvertTo<bool>(item["mandatory_flag"]?.ToObject<object>(), false); // TODO: This errors as it can return an expression.

                if (item["options"] is JArray array)
                {
                    foreach (var i in array)
                    {
                        pdsi.Options[i["id"].ToObject <string>()] = i["label"].ToObject <string>();
                    }
                }

                ApplyCustomFixesForPipedriveErrors(pdsi, name);

                result[pdsi.Key] = pdsi;
            }

            return(result);
        }